2013-04-20 32 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?