0

私のアプリでは、ユーザーには 1 つの場所があり、場所はユーザーに属します。

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

users/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

私が得ているエラーは、「保護された属性を一括割り当てできません: 国、州、都市、住所、郵便番号」です。

「保護された属性を一括割り当てできません: 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 を検索しましたが、この問題を抱えている人を見つけることができないようです (他の誰も 後者の一括割り当てを持っています)。

4

1 に答える 1

0

これは実際には、管理フラグを使用していたコントローラーの更新アクションの問題でした --

if user.update_attributes(params[:user], as: :admin)

-- アプリ固有の理由で。不思議なことに、そのフラグを取り除けば、うまくいきました。そのため、場所も更新されている場合は管理者が更新しないようにすることで、それを回避する方法を見つけなければなりませんでした。誰かが似たようなことに遭遇した場合に備えて。

于 2013-07-20T01:40:43.907 に答える