我在为我的某个数据对象进行更新操作时遇到问题。我有:
class UserProfile < ActiveRecord::Base
belongs_to :address, :dependent => :destroy
belongs_to :post_address, :class_name => 'Address', :dependent => :destroy
accepts_nested_attributes_for :address
accepts_nested_attributes_for :post_address
# validations and stuff
end
class Address < ActiveRecord::Base
# validations and stuff
end
问题在于形式和行动:
= form_for @up, :url => '/profile/edit', :method => :post do |f|
= f.error_messages
#...
= f.fields_for :address, @up.address do |a|
#...
= f.fields_for :post_address, @up.post_address do |a|
#...
.field.push
= f.submit 'Save', :class=>'ok'
动作:
def edit_account
@user = current_user
if request.post?
@up = @user.user_profile.update_attributes(params[:user_profile])
if @up.save
redirect_to '/profile/data', :notice => 'Zmiana danych przebiegła pomyślnie.'
end
else
@up = @user.user_profile
end
end
我得到的错误如下:
Couldn't find Address with ID=3 for UserProfile with ID=2
它出现在以下行中:
@up = @user.user_profile.update_attributes(params[:user_profile])
我认为AR在提交表单时会尝试创建另一个Address
,但我不确定。
为什么会出现此错误?我的代码出了什么问题?
答案 0 :(得分:0)
所以不确定它是如何工作的,因为@ up.address是零。你可以试试像:
=f.fields_for :address, (@up.address.nil? ? Address.new() : @up.address) do |a|
#...
= f.fields_for :post_address, (@up.post_address.nil? Address.new() : @up.post_address) do |a|
#...
那可能有所作为?
答案 1 :(得分:0)
<强>解决强>
我刚刚更改了UserProfile
中的关联类型:
has_one :address,
:class_name => 'Address',
:foreign_key => 'user_profile_id',
:conditions => {:is_post => false},
:dependent => :destroy
has_one :post_address,
:class_name => 'Address',
:foreign_key => 'user_profile_id',
:conditions => {:is_post => true},
:dependent => :destroy,
:validate => false
稍微调整了控制器。谢谢你的帮助!