2013-04-20 79 views
0

在我的應用程序中,我有用戶和項目的模型。用戶遷移後的帖子

我希望用戶能夠關注很多項目。因此,用戶has_many項目以及項目belongs_to不僅創建了它們的用戶,還有跟隨它們的用戶。

因此,我生成了一個名爲ProjectRelationship的遷移,並試圖使其在下面流動,但似乎不起作用。有人可以幫助我解決我的關聯嗎?

感謝您的幫助!

project_relationship.rb

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

project.rb

belongs_to :user 
has_many :project_relationships 
has_many :followers, through: :project_relationships, source: :user 

user.rb

has_many :projects 
has_many :project_relationships 
has_many :projects_followed, through: :project_relationships, source: :project 

個schema.rb

create_table "project_relationships", :force => true do |t| 
    t.integer "follower_id" 
    t.datetime "created_at",  :null => false 
    t.datetime "updated_at",  :null => false 
    t.integer "projectuser_id" 
end 

add_index "project_relationships", ["follower_id"], :name => "index_project_relationships_on_follower_id", :unique => true 
add_index "project_relationships", ["projectuser_id"], :name => "index_project_relationships_on_projectuser_id" 

項目/ show.html.erb

<%= @project.followers.count %> 
+0

那麼,真正的問題是什麼?當你運行代碼時發生了什麼,它與你期望的有什麼不同? – sosborn 2013-04-20 03:49:24

+0

我不知道如果我得到的關聯正確,因爲我得到以下錯誤:項目中的ActiveRecord :: StatementInvalid#show; SQLite3 :: SQLException:no such column:project_relationships.project_id:SELECT COUNT(*)FROM「users」INNER JOIN「project_relationships」ON「users」。「id」=「project_relationships」。「user_id」WHERE「project_relationships」。「project_id 「= 23 – spl 2013-04-20 03:51:48

+0

您是否真的爲所有模型創建遷移?您的模式看起來像您創建的所有項目都是針對project_relationships的遷移。 – sosborn 2013-04-20 03:53:20

回答

0

你需要指定的外鍵。 ProjectRelationship模型將期望相應的表具有「user_id」和「project_id」列。但是,您使用了不同的名稱。因此,無論指定的外鍵:

class ProjectRelationship < ActiveRecord::Base 
    belongs_to :user, foreign_key: "follower_id" 
    belongs_to :project, foreign_key: "projectuser_id" 
end 

或更改列名遷移:

create_table :project_relationships do |t| 
    t.integer :user_id 
    t.integer :project_id 
    ... 
end 

您還需要指定在其他模型外鍵:

class Project < ActiveRecord::Base 
    belongs_to :user 
    has_many :project_relationships, foreign_key: "projectuser_id" 
    has_many :followers, through: :project_relationships, source: :user 
end 

class User < ActiveRecord::Base 
    has_many :projects 
    has_many :project_relationships, foreign_key: "follower_id" 
    has_many :projects_followed, through: :project_relationships, source: :project 
end 
+0

好的,將使用指定的外鍵方法。所以如果我這樣做,我會在所有模型中指定外鍵?項目關係,項目和用戶。我會測試這個今晚 – spl 2013-04-20 04:48:16

+0

是的,你必須指定他們哪裏的Rails不能從模型的名字推導出來。如果Rails看到'belongs_to:user',它會期望''user_id「'的外鍵,所以你需要告訴它你使用了另外一個。祝你好運! – Roma149 2013-04-20 18:28:32

+0

感謝您的全力幫助。請在下面查看我更新的問題,我會在以後檢查您的回覆。 – spl 2013-04-21 01:28:17

0

@ roma149 - 感謝您的回覆。我更新了控制器,路線和你說的話。沒有錯誤產生,但是當我點擊_follow.html.erb的按鈕後,它似乎並沒有按照項目或更新計數「@ project.followers.count」

已移動的細節在這裏:Why doesn't my user follow/unfollow button work?