2012-07-17 81 views
10

,我發現了錯誤未知屬性:current_user.stories.build的USER_ID durring執行未知屬性:user_id說明

class User < ActiveRecord::Base 
    has_many :stories, class_name: 'Story', foreign_key: 'user_id', dependent: :destroy 
    ... 

class Story < ActiveRecord::Base 
    belongs_to :user, class_name: 'User', foreign_key: 'user_id' 
    ... 

schema.rb

create_table "stories", :force => true do |t| 
    t.string "responsible" 
    t.string "descr" 
    t.string "state" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    create_table "users", :force => true do |t| 
    t.string "email" 
    t.string "password_digest" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    t.string "name" 
    end 

它不包含 'USER_ID'領域。有任何想法嗎?

回答

1

您的stories表中應該有一個user_id字段,如下所示,以定義模型中的關聯。

create_table "stories", :force => true do |t| 
    t.integer "user_id" 
    t.string "responsible" 
    t.string "descr" 
    t.string "state" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 
    ... 
end 

編輯

檢查Emily的詳細解釋回答。

27

Kulbir是正確的,您需要在stories表中定義user_id列,但沒有說明如何實現該操作。

進行該更改的正確方法是創建新的遷移。按照慣例,它應該被稱爲add_user_id_to_stories並且將如下(假設你使用Rails 3+)創建:

rails generate migration add_user_id_to_stories 

如果運行,它實際上應該產生已包含您所需要的變革遷移做,這應該是這樣的:

add_column :stories, :user_id, :integer 

順便說一句,當你以下有關協會命名,這你是Rails的慣例,實際上你可以跳過很多額外的規範。在User型號中,您可以指定has_many :stories,並在Story型號中指定belongs_to :user。 Rails將使用您指定的相同類名和外鍵。

+0

感謝修正和進一步的解釋! +1 – 2012-07-17 19:37:20

0

你應該使用新的語法,並傳遞字段類型爲符號

add_column :stories, :user_id, :integer