i seem to be experiencing a bug where rails tells me that my
organization object''s associated credit card is invalid (activerecord
validation-wise invalid), when i know it to be valid. this happens
only if i tell the organization to validate_associated :credit_card.
i know the associated credit card is valid, because a) that
credit_card object itself throws no validation errors, and b) if i
change @credit_card.save to
@credit_card.update_attributes(params[:credit_card]) i get a new
credit_card record in the database, yet the overall transaction fails
later because @organization still thinks the credit card is invalid.
taking the validates_associated :credit_card out of Organization lets
the whole operation complete normally, using the same input data.
i have a model structure roughly like so:
User
id, etc...
BusinessUser
id, etc...
user_id
Organization
id, etc...
primary_business_user_id
credit_card_id
CreditCard
id, etc...
and a business_user_controller to create it all:
def create
@user = User.new(params[:user])
@business_user = BusinessUser.new(params[:business_user])
@business_user.user = @user
@organization = Organization.new(params[:organization])
@organization.primary_user = @business_user
@credit_card = CreditCard.new
credit_card_validated = true
has_credit_card = params[:has_credit_card] == ''true''
if has_credit_card
@credit_card = CreditCard.new(params[:credit_card])
credit_card_validated = @credit_card.save
@organization.credit_card = @credit_card
end
begin
User.transaction do
if @user.save! and
#((has_credit_card and @credit_card.save!) or true) and
(credit_card_validated and true or raise
ActiveRecord::RecordNotSaved) and
@organization.save! and
@business_user.save!
flash[:notice] = ''Account created. Check your email for login
details.''
Mailer::deliver_signup_confirmation(@user)
redirect_to :controller => ''login'', :action =>
''login''
end
end # end User.transaction
rescue
render :action => ''new''
end
end
can anyone offer some insight with what''s here, or do you want me to
zip and post the entire working example? i''ve been pulling my hair
out for a week now poring over debug output from this :-/
thanks,
jeff
no ideas anyone? do you need more info? On 8/16/06, jeff emminger <jemminger@gmail.com> wrote:> i seem to be experiencing a bug where rails tells me that my > organization object''s associated credit card is invalid (activerecord > validation-wise invalid), when i know it to be valid. this happens > only if i tell the organization to validate_associated :credit_card. > > i know the associated credit card is valid, because a) that > credit_card object itself throws no validation errors, and b) if i > change @credit_card.save to > @credit_card.update_attributes(params[:credit_card]) i get a new > credit_card record in the database, yet the overall transaction fails > later because @organization still thinks the credit card is invalid. > > taking the validates_associated :credit_card out of Organization lets > the whole operation complete normally, using the same input data. > > i have a model structure roughly like so: > > User > id, etc... > > BusinessUser > id, etc... > user_id > > Organization > id, etc... > primary_business_user_id > credit_card_id > > CreditCard > id, etc... > > and a business_user_controller to create it all: > > def create > > @user = User.new(params[:user]) > @business_user = BusinessUser.new(params[:business_user]) > @business_user.user = @user > @organization = Organization.new(params[:organization]) > @organization.primary_user = @business_user > @credit_card = CreditCard.new > credit_card_validated = true > > has_credit_card = params[:has_credit_card] == ''true'' > if has_credit_card > @credit_card = CreditCard.new(params[:credit_card]) > credit_card_validated = @credit_card.save > @organization.credit_card = @credit_card > end > > begin > User.transaction do > if @user.save! and > #((has_credit_card and @credit_card.save!) or true) and > (credit_card_validated and true or raise > ActiveRecord::RecordNotSaved) and > @organization.save! and > @business_user.save! > flash[:notice] = ''Account created. Check your email for login details.'' > Mailer::deliver_signup_confirmation(@user) > redirect_to :controller => ''login'', :action => ''login'' > end > > end # end User.transaction > rescue > render :action => ''new'' > end > end > > can anyone offer some insight with what''s here, or do you want me to > zip and post the entire working example? i''ve been pulling my hair > out for a week now poring over debug output from this :-/ > > thanks, > jeff >
On 8/18/06, jeff emminger <jemminger@gmail.com> wrote:> > no ideas anyone? do you need more info? > > > On 8/16/06, jeff emminger <jemminger@gmail.com> wrote: > > i seem to be experiencing a bug where rails tells me that my > > organization object''s associated credit card is invalid (activerecord > > validation-wise invalid), when i know it to be valid. this happens > > only if i tell the organization to validate_associated :credit_card. > > > > i know the associated credit card is valid, because a) that > > credit_card object itself throws no validation errors, and b) if i > > change @credit_card.save to > > @credit_card.update_attributes(params[:credit_card]) i get a new > > credit_card record in the database, yet the overall transaction fails > > later because @organization still thinks the credit card is invalid. > > > > taking the validates_associated :credit_card out of Organization lets > > the whole operation complete normally, using the same input data. > > > > i have a model structure roughly like so: > > > > User > > id, etc... > > > > BusinessUser > > id, etc... > > user_id > > > > Organization > > id, etc... > > primary_business_user_id > > credit_card_id > > > > CreditCard > > id, etc... > > > > and a business_user_controller to create it all: > > > > def create > > > > @user = User.new(params[:user]) > > @business_user = BusinessUser.new(params[:business_user]) > > @business_user.user = @user > > @organization = Organization.new(params[:organization]) > > @organization.primary_user = @business_user > > @credit_card = CreditCard.new > > credit_card_validated = true > > > > has_credit_card = params[:has_credit_card] == ''true'' > > if has_credit_card > > @credit_card = CreditCard.new(params[:credit_card]) > > credit_card_validated = @credit_card.save > > @organization.credit_card = @credit_card > > end > > > > begin > > User.transaction do > > if @user.save! and > > #((has_credit_card and @credit_card.save!) or true) and > > (credit_card_validated and true or raise > > ActiveRecord::RecordNotSaved) and > > @organization.save! and > > @business_user.save! > > flash[:notice] = ''Account > created. Check your email for login details.'' > > > Mailer::deliver_signup_confirmation(@user) > > redirect_to :controller => ''login'', > :action => ''login'' > > end > > > > end # end User.transaction > > rescue > > render :action => ''new'' > > end > > end > > > > can anyone offer some insight with what''s here, or do you want me to > > zip and post the entire working example? i''ve been pulling my hair > > out for a week now poring over debug output from this :-/It all comes down to that validates_associated? Axe it, move on! You''ll ''aha'' and solve it later. jeremy -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060819/ce80176e/attachment.html