2015-04-16 44 views
0

我有一個小船模型和它的模型,如品牌,型號和年份。我也有用戶模型,我想通過添加遷移到用戶模型boat_id並將belongs_to :boathas_many :boats添加到用戶模型來連接它們。但是我無法從控制檯達到User.first.boat.name,即使我能夠達到Boat.first.brand.name帶有列表Rails的用戶模型 - 如何到達?

當我嘗試User.first.boat.name。控制檯給出錯誤說:

NoMethodError: undefined method `boat' for #<User:0x0000000665dc30> 

順便說一句:小船模型包括model_idbrand_idyear_id

EDIT1: 或者我應該去除船模型和直接添加model_idbrand_idyear_id到用戶模式。

EDIT2: 我希望能夠達到User.first.boat.brand.name或User.first.boat.year.name or User.first.boat.model.name

EDIT3: 每船有一個品牌,一年和型號。但用戶可以有很多船隻

EDIT4: 我會做的是; 用戶可以註冊並登錄 然後用戶按鏈接列表我的船。 他/她保存船然後頁面呈現給用戶配置文件 在用戶配置文件中,我不知道如何獲取當前用戶船名年份等,這就是爲什麼我很困惑。很抱歉的誤解

+0

是的,你需要在boat表中有user_id。假定每個用戶有很多小船,但是每個小船隻有一個用戶。它是否正確? –

+0

你可以發佈你已經運行到這一點的相關模型和遷移嗎?在你的問題中,你說品牌,型號和年份是你的控制檯的屬性,你正在做'Boat.first.brand.name',這看起來像品牌是一個模型。 –

+0

對不起,錯誤是他們是個人模特。更正 – Shalafister

回答

1

我認爲你對Rails關聯如何與它們在數據庫中的存儲方式一起工作感到困惑。如果用戶可以有很多船,那麼外鍵需要在boats表上。目前你在用戶表中有boat_id,這應該被移除,並且根據Matt的回答,需要將user_id列添加到船表中。

Reference

爲了達到你想要做什麼,你需要設置你的模型按以下方式:

class User 
    has_many :boats 
    ... 
end 

class Boat 
    belongs_to :user # table has a user_id column 
    ... 
end 

然後你就可以使用訪問船的品牌user.boats.first.brand.name

1

運行rails generate migration,然後在change填寫方法如下:

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

然後運行rake db:migrate

你的用戶型號has_many小船,所以你需要小船表來引用用戶。可能值得閱讀ActiveRecord關聯的Rails指南,以便更好地瞭解它的工作方式:http://guides.rubyonrails.org/association_basics.html#the-has-many-association

+0

謝謝,但我有brand_id已經在用戶模型'> User.new =>#<用戶ID:無,名稱:無,電子郵件:無,created_at:無,updated_at:無,password_digest:無,remember_digest:無, activation_digest:nil,activated:false,activated_at:nil,reset_digest:nil,reset_sent_at:nil,boat_id:nil' – Shalafister

+0

這一切都取決於你正試圖建立的關係。如果您可以將預期結果添加到問題中,即用戶是否擁有多個品牌或一個品牌,那麼我們可以指引您使用正確的關係。 –

相關問題