2016-08-16 43 views
0

这里是我目前的问题的一些信息:Rails 4 has_many关联两次在同一模型

我有两个模型,用户和活动。用户可以创建活动并为其添加书签。

我目前有一个工作设置,允许用户创建活动,我正在修改它也能够将它们加入书签,但没有成功。

user.rb:

class User < ActiveRecord::Base 
    ... 
    has_many :activities 
    ... 
end 

activity.rb

class Activity < ActiveRecord::Base 
... 
belongs_to :user 
... 
end 

我可以做这样的事情?

class User < ActiveRecord::Base 
has_many :activities 
has_many :bookmarks, :through => :activities 
end 

是一个many_to_many与'inbetween'模型更合适的方法吗?

对于上述做法,当我试图检索用户的书签,这是我得到:

ActiveRecord::HasManyThroughSourceAssociationNotFoundError (Could not find the source association(s) "bookmark" or :bookmarks in model Activity. 
+0

你能形容更多吗?发生了什么,有什么错误信息? –

+0

是的,例如,当我使用上述方法处理问题并尝试检索用户的书签时,出现此错误: “ActiveRecord :: HasManyThroughSourceAssociationNotFoundError(无法找到源关联”书签“或:书 标记在模型活动。试试'has_many:书签,:通过=>:活动,:来源=>'。“ 谢谢你的回复 – fmlopes

+0

当前模式如何,'活动'有很多'书签“? –

回答

0

是的,你可以做

在你/app/models/activity.rb文件中添加belongs_to :bookmark,你可以如果您想使用has_many :users, through: :activitiesbookmarks.rb,请添加belongs_to :user

如果你没有书签模型

多对多的关系需要可用于连接两个型号的表。这里用户和活动是两个模型,并且为了建立多对多的关系,那么必须存在另一个表,以便它们可以相关。这里要连接这两个表,您可以制作和使用user_activity表或书签表以及与此表关联的模型。

之后,您可以使用您正在关注的方法。 享受

+0

这是一种方法,我试图做所有事情都没有书签模型,有什么建议吗?或者我应该坚持这个解决方案吗? – fmlopes

+0

已经针对您的问题更新了答案。 –

0

我试图做的事情的方式是无效的,它不起作用。像Pradeep Sapkota暗示,对这类问题的解决方案是非常简单,如下:

User.rb

class User < ActiveRecord::Base 
has_many :activities 
has_many :bookmarks 
end 

Bookmark.rb(新文件)

class Bookmark < ActiveRecord::Base 
belongs_to :user 
belongs_to :activity 
end 

Activity.rb

class Activity < ActiveRecord::Base 
belongs_to :user 
has_many :bookmarks 
end 

我们还需要创建一个新的迁移来添加书签表

class CreateBookmarks < ActiveRecord::Migration 
def change 
    create_table :bookmarks do |t| 
    t.belongs_to :user, index: true 
    t.belongs_to :activity, index: true 

    t.timestamps 
    end 
end 
end 
相关问题