I am trying to hack in_place_edit_for to avoid empty fields:
def in_place_edit_for(object, attribute, options = {})
if params[:value] == ''
params[:value] = 'Hey! You must fill the field!'
end
super(object,attribute,options)
end
It doesn't work, the params[:value] is not affected.
But I've done the same thing with the in_place_editor helper to
globalize options parameters and it works...
(ok, I could past the 3 lines of define_method...)
Well, it was worth a try. I’ve never used in_place_editor so I really don’t know much about it. I was going to look at the API but its [gasp!] down. [again.]
The reason it's not work is because in_place_edit_for defines an
instance method which will access params at run-time. Not define
time. So the statement you put before super will have no effect.
23: def in_place_edit_for(object, attribute, options = {})
24: define_method("set_#{object}_#{attribute}") do
25: @item =
object.to_s.camelize.constantize.find(params[:id])
26: @item.update_attribute(attribute, params[:value])
27: render :text => @item.send(attribute)
28: end
29: end
You should monkey patch this method or you can simply define the
action it would have defined yourself.
For some reason it has an options parameter but never uses it... so
your patch could be flexible.
e.g.
in_place_edit_for(:post, :comment, :check_blanks => true, :blank_error
=> 'What do you want to say?')
The reason it's not work is because in_place_edit_for defines an
instance method which will access params at run-time. Not define
time. So the statement you put before super will have no effect.
Gasp! You're right. I'm so stupid.
in_place_edit_for(:post, :comment, :check_blanks => true, :blank_error
=> 'What do you want to say?')
module ActionController
module Macros
module InPlaceEditing
module ClassMethods
def in_place_edit_for(object, attribute, options = {})
define_method("set_#{object}_#{attribute}") do
@item = object.to_s.camelize.constantize.find(params[:id])
if params[:value].blank? && options[:check_blanks]
render :text => options[:blank_error] || "Fill in this
field."
else
@item.update_attribute(attribute, params[:value])
render :text => @item.send(attribute)
end
end
end
end
end
end
end