2012-02-24 71 views
3

下面的類彼此結合(第一Rails應用程序沒有教程):許多一對多通過協會構建/創建Rails應用程序性能

class Team < ActiveRecord::Base 
    has_many :team_users, :class_name => "TeamUser" 
    has_many :users, :through => :team_users 
end 

class TeamUser < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :team 
end 

class User < ActiveRecord::Base 
    has_many :team_users, :class_name => "TeamUser" 
    has_many :teams, :through => :team_users 
end 

如果我有用戶屬性,嘗試做的時候如下:

u.teams.build(:name => "catsteam", :captain => true, :owner => :true) 

隊長和所有者是TeamUser類的屬性。執行我碰到下面的命令:

u.teams.build(:name => "catsteam", :captain => true, :owner => :true) 
ActiveRecord::UnknownAttributeError: unknown attribute: captain 
... 
from -e:1:in `load' 
from -e:1:in `<main>' 

在一個側面說明,如果我得到了用戶,創建組,然後創建teamuser所有作品。我很困惑,已經搜查,但找不到任何東西。

謝謝。

回答

0

u.teams指的是Team實例。有了這個命令,你正在構建Team實例,所以船長和所有者無法識別,因爲它們屬於TeamUser而不是用戶。 你應該在2個步驟做:如果您在遇到驗證錯誤

team = Team.create 
team_user = u.team_users.build(:team_id => team.id) 

當然你team_user你可能會根據你的應用程序你的團隊給毀了。

+0

這對我來說似乎有點不好。基本上你要去數據庫而不是去一次。我認爲,既然模型鏈接,它應該能夠建立適當的屬性和創建TeamUser。 – BoGs 2012-02-24 15:30:41

+0

可能可以像創建對象那樣創建對象,但肯定不會通過傳遞屬於團隊用戶模型的':captain'和':owner'屬性。 – rpechayr 2012-02-24 16:07:27

+0

您將隱式創建一個團隊用戶。你如何期望Rails猜測你指的是你隱式創建的實例的屬性(當你明確創建另一個實例'Team'時,'TeamUSer'? – rpechayr 2012-02-24 16:09:08