Module: Railslove::Plugins::FindByParam::ClassMethods
- Defined in:
- lib/find_by_param.rb
Instance Method Summary collapse
-
#make_permalink(options = {}) ⇒ Object
This method initializes find_by_param.
Instance Method Details
#make_permalink(options = {}) ⇒ Object
This method initializes find_by_param
class Post < ActiveRecord::Base
make_permalink :with => :title, :prepend_id => true
end
The only required parameter, is :with
.
If you want to use a non URL-save attribute as permalink your model should have a permalink-column to save the escaped permalink value. This field is then used for search.
If your you can just say make_permalink :with => :login and you’re done.
You can use for example User.find_by_param(params, args) to find the user by the defined permalink.
Available options
:with
-
(required) The attribute that should be used as permalink
:field
-
The name of your permalink column. make_permalink first checks if there is a column, default is ‘permalink’.
:prepend_id
- true|false
-
Do you want to prepend the ID to the permalink? for URLs like: posts/123-my-post-title - find_by_param uses the ID column to search, default is false.
:param_size
- Number
-
Desired maximum size of the permalink, default is 50.
:escape
- true|false
-
Do you want to escape the permalink value? (strip chars like öä?&) - actually you must do that, default is true.
:validate
- true|false
-
Don’t validate the :with field - set this to false if you validate it on your own, default is true.
:forbidden
- Regexp|String|Array of Strings
-
Define which values should be forbidden. This is useful when combining user defined values to generate permalinks in combination with restful routing. Make sure, especially in the case of a Regexp argument, that values may become valid by adding or incrementing a trailing integer.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/find_by_param.rb', line 65 def make_permalink(={}) [:field] ||= "permalink" [:param] = [:with] # :with => :login - but if we have a spcific permalink column we need to set :param to the name of that column [:escape] ||= true [:prepend_id] ||= false [:param_size] ||= 50 [:validate] = true if [:validate].nil? # validate if there is something we can use as param. you can overwrite the validate_param_is_not_blank method to customize the validation and the error messge. if ![:prepend_id] || ![:validate] validate :validate_param_is_not_blank end if forbidden = .delete(:forbidden) if forbidden.is_a? Regexp [:forbidden_match] = forbidden else [:forbidden_strings] = Array(forbidden).map(&:to_s) end end if self.column_names.include?([:field].to_s) [:param] = [:field] before_save :save_permalink end self. = extend Railslove::Plugins::FindByParam::SingletonMethods include Railslove::Plugins::FindByParam::InstanceMethods rescue ActiveRecord::ActiveRecordError puts "[find_by_param error] database not available?" end |