I have got a problem with :on => create validation
validates_uniqueness_of :nip, :regon, on => :create
Doesn’t work properly when I call it via xhr
In my log
Processing AdminController#doajaxing_for_updateuser (for 127.0.0.1 at
2010-03-22 17:37:13) [PUT]
Parameters:
{“account”=>{“company_attributes”=>{“nip”=>“634-119-69-92”}},
“named”=>“company|nip”, “locale”=>“pl”}
Processing AdminController#doajaxing_for_createuser (for 127.0.0.1 at
2010-03-22 17:31:33) [POST]
Parameters:
{“account”=>{“company_attributes”=>{“nip”=>“634-119-69-95”}},
“named”=>“company|nip”, “locale”=>“pl”}
It looks fine, Put and Post is given by my jquery request…
But still validation is always invoking validates_uniqueness_of …
why /.??
I check validation by:
@model.valid?
and later bringing messages using something like this
@model.errors[current_given]
regards
On Mar 22, 4:59Â pm, Piotr [email protected] MÄ…sior
[email protected] wrote:
I have got a problem with :on => create validation
validates_uniqueness_of :nip, :regon, on => :create
The :on there doesn’t refer to the controller action - it refers to
whether the save is an update to an existing record or not.
Fred
So painful, I was wondering is there any dry_save or something like
this ?
Piotr MÄ…sior wrote:
So painful, I was wondering is there any dry_save or something like
this ?
How do you populate your @model?
Stephan
Model is passed by @model variable with nested attributes so it is
like:
@model = model.new
@model.build_another
at form it is looped through like
- form_for @account, :url => { :action => @given_action , :controller
=> ‘admin’} do |f|
- f.fields_for :company do |o|
%label{:for => “company|name”}=
Company.human_attribute_name(:name)
= o.text_field :name, :named => “company|name”
- o.fields_for :city do |x|
%label{:for => “company|city|name”}=
City.human_attribute_name(:name)
= x.text_field :name, :named => “company|city|name”
jquery is responsible for communication and requesting my particular
methods so it calls appropriate model basing on something like
params[:model], doajaxing method knows how to deal with nested
attributes
so it request from controller some action like
doajaxing_for_createmodel and it looks like:
def doajaxing_for_createmodel
doajaxing(“account”)
end
and doajaxing itself looks like
def doajaxing(object_name)
if request.xhr?
sended = params[object_name.to_sym]
object_name = object_name.camelize
@process = object_name.constantize
@process = @process.new(sended)
@process.valid?
##some other processing
if @process.errors[current_given]
#process message and field
#some @response is given in json
render :json => @response
end
end
that it work… I wonder if I can use instead of @process.valid?
something else
Piotr MÄ…sior wrote:
Model is passed by @model variable with nested attributes so it is
like:
@model = model.new
@model.build_another
at form it is looped through like
- form_for @account, :url => { :action => @given_action , :controller
=> ‘admin’} do |f|
- f.fields_for :company do |o|
%label{:for => “company|name”}=
Company.human_attribute_name(:name)
= o.text_field :name, :named => “company|name”
- o.fields_for :city do |x|
%label{:for => “company|city|name”}=
City.human_attribute_name(:name)
= x.text_field :name, :named => “company|city|name”
jquery is responsible for communication and requesting my particular
methods so it calls appropriate model basing on something like
params[:model], doajaxing method knows how to deal with nested
attributes
so it request from controller some action like
doajaxing_for_createmodel and it looks like:
def doajaxing_for_createmodel
doajaxing(“account”)
end
and doajaxing itself looks like
def doajaxing(object_name)
if request.xhr?
sended = params[object_name.to_sym]
object_name = object_name.camelize
@process = object_name.constantize
@process = @process.new(sended)
Because you have “@process.new”, the “on_create” validations will be
triggered.
If you are updating an existing record, use
@process = @process.find(…model-id…)
where model-id is usually taken from “params” (params[:id]).
Then assign the new values to @process.
Then the “on_create” validations will not be triggered.
@process.valid?
##some other processing
if @process.errors[current_given]
#process message and field
#some @response is given in json
render :json => @response
end
end
that it work… I wonder if I can use instead of @process.valid?
something else
Hope that helps. I think your “doajaxing” method needs to know about the
two cases, create/update.
Stephan
I just realized it too… so bad for me
Ok, I thought there would be another more convenient way but as I can
now see there is not
Regards, thanks everyone