2

Devise gem を使用してユーザーを認証しています。User モデルと Address モデルの関係があり、各 Userhas_one :addressと各 addressがありますbelongs_to :user。新しいユーザーを登録しようとすると、ページの読み込み時に次のエラーが表示されます: unknown attribute: user_id. <% resource.build_address...トレースは、私のビューに見られるラインを指しています。

ビューからその行を削除すると、ページは読み込まれますが、ネストされたフォーム フィールドは表示されません。

Rails コンソールでは、アドレスを作成して保存し、その保存したアドレスを、保存する新しいユーザーの属性として使用できます。

ビューは次のとおりです。

<% resource.build_address unless resource.address %>
  <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

    <%= f.email_field :email, :autofocus => true, placeholder: "Your email", class: 'input-block-level' %><br>
    <%= f.password_field :password, placeholder: "Password", class: 'input-block-level' %><br>
    <%= f.password_field :password_confirmation, placeholder: "Confirm password", class: 'input-block-level' %><br>
    <%= f.text_field :favorite_cuisine, placeholder: "Favorite cuisine", class: 'input-block-level' %><br>
    <%= f.fields_for :address do |address_form| %>
      <%= address_form.text_field :street_one, placeholder: "Street", class: 'input-block-level' %><br>
      <%= address_form.text_field :street_two, placeholder: "Street #2", class: 'input-block-level' %><br>
      <%= address_form.text_field :city, placeholder: "City", class: 'input-block-level' %><br>
      <%= address_form.text_field :state, placeholder: "State", class: 'input-block-level' %><br>
      <%= address_form.text_field :zip, placeholder: "zip", class: 'input-block-level' %><br>
    <% end %>
<% end %>

私のユーザーモデル:

has_one :address, :dependent => :destroy
accepts_nested_attributes_for :address

# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,
:favorite_cuisine, :username, :address

validates_presence_of :email
validates_presence_of :address

私の住所モデル:

belongs_to :user
attr_accessible :city, :state, :street_one, :street_two, :zip, :user_id

validates_presence_of :city
validates_presence_of :state
validates_presence_of :street_one
validates_presence_of :zip

ここでどこが間違っていますか?

4

2 に答える 2

2
rails g migration AddUserIdToAddresses

次に、ファイルを編集し、

def change
  add_column :addresses, :user_id, :integer
end

次にレーキ db:migrate

于 2013-06-03T16:55:16.457 に答える
0

次のようなことを試してください:

<%= f.fields_for (resource.address || :address), ... %> 

フォームはネストされているため、私の知る限り、フォーム送信で新しいフォームを作成する必要があります。

于 2013-06-03T14:17:53.100 に答える