2013-06-03 165 views
2

我正在使用Devise gem來驗證用戶。我有一個用戶模型和地址模型關係,其中每個用戶has_one :address和每個地址belongs_to :user。當我嘗試註冊新用戶時,頁面加載時出現以下錯誤:unknown attribute: user_id。跟蹤指向我的視圖中看到的行<% resource.build_address...具有設計嵌套屬性的未知屬性'user_id'

如果我只是刪除我的觀點,即線的頁面將加載,但沒有我的嵌套表單字段的顯示出來。

在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 

我要去哪裏錯了嗎?

+1

你能在你的方案,解決了一個USER_ID現場驗證? (我敢打賭它沒有)。 –

+0

你是對的,地址沒有user_id字段。我應該如何構建我的遷移以將user_id添加到地址並使其引用用戶? –

回答

2
rails g migration AddUserIdToAddresses 

然後編輯該文件,

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

然後耙分貝:遷移

0

嘗試這樣:

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

因爲表格嵌套,應該建立一個新的表單提交我的知識。