2011-02-14 46 views
2


我有以下型號的Rails 3:許多到許多與病情的關係

class Project < ActiveRecord::Base 
    has_many :project_members 
    has_many :members, :through => :project_members, :uniq => true,:class_name => "User", :source => :user 
    has_many :admins, :through => :project_members, :uniq => true, :conditions => ['project_members.admin = ?', true], :class_name => "User", :source => :user 

end 

class User < ActiveRecord::Base 
    # References 
    has_many :project_members 
    has_many :projects, :through => :project_members 

end 

和連接表

class ProjectMember < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 
end 

的關係似乎工作,但是當我想通過此代碼將管理員添加到項目中

project.admins.push(u) 
project.save 

(其中u是用戶)它會保存新的關係,但沒有在連接表中將admin設置爲true。

即使我做

project.project_members.first.admin = true 

並保存它好好嘗試更新表的屬性項目手動從項目的這種關係,並設置管理員爲true。

我在做什麼錯? (請記住,我與Ruby和Rails共初學者)
我一直在google搜索的最後幾個小時找到一個解決方案,但找不到任何東西:/

+0

不要指望Rails有太多的魔法。在「保存項目時,它不會更新表中的屬性」:保存不級聯(它們只在創建時執行)。 – 2011-04-16 21:15:48

回答

2

我認爲你必須改變你的管理員關聯到:

has_many :admins, :through => :project_members, :uniq => true, :conditions => {:project_members => {:admin => true}}, :class_name => "User", :source => :user 

我希望能幫到你。

+0

我已經試過,但由於管理員屬性在通過表中,而不是在用戶表中失敗,並出現以下錯誤:SQLite3 :: SQLException:no such column:users.admin:SELECT「users」。* FROM 「(用戶)INNER JOIN」project_members「ON」users「.id =」project_members「.user_id WHERE((」project_members「.project_id = 3)AND((」users「。」admin「='t')))LIMIT 1 ` – Hameno 2011-02-14 20:07:39