在我的应用中,用户有一个位置,而位置属于用户。
user.rb
has_one :location
accepts_nested_attributes_for :location
attr_accessible ... :location_attributes
location.rb
belongs_to :user
attr_accessible :country, :state, :city, :address, :zipcode, :user_id
users_controller (用户是自动创建的,因此没有“新”视图)
def edit
@user = current_user
@user.build_location
end
用户/ edit.html.haml
= form_for @user do |f|
...
= f.fields_for :location do |location|
%p
= location.label :country
= location.text_field :country
%p
= location.label :state
= location.text_field :state
%p
= location.label :city
= location.text_field :city
%p
= location.label :address
= location.text_field :address
%p
= location.label :zipcode
= location.text_field :zipcode
= f.submit
我得到的错误是“无法批量分配受保护的属性:国家,州,城市,地址,邮政编码。”
之前我已经获得了“Can not Mass Assign Protected Attributes:location_attribute”类型的错误,但这不是问题所在。
这是我的(删节)参数:
{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"RTpnMsKuByhnGgs9xrX3d0nzKzcaqIcpS75tsujPX2s=", "user"=>{"name"=>"myname", ... "location_attributes"=>{"country"=>"USA", "state"=>"whatever", "city"=>"", "address"=>"", "zipcode"=>""}}, "commit"=>"Update account", "action"=>"update", "controller"=>"users", "id"=>"219"}
知道这里发生了什么吗?我搜索了一个WHILE,似乎找不到有这个问题的人(everyone else has the latter mass-assign one)。
答案 0 :(得分:0)
这实际上最终导致控制器中的更新操作出现问题,该操作使用了管理标志 -
if user.update_attributes(params[:user], as: :admin)
- 针对特定应用的原因。奇怪的是,如果我拿走那面旗帜,它就可以了。因此,我不得不想办法解决这个问题 - 如果位置也在更新,请不要管理员更新。以防任何人遇到类似的事情。