以下是我当前问题的一些信息:
我有两个模型,User和Activity。用户可以创建活动并为其添加书签。
我目前有一个工作设置,允许用户创建活动,我希望修改它以便能够为它们添加书签,但没有成功。
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
是一个带有&#39; inbetween&#39;的many_to_many建立一个更合适的方法?
关于上述方法,当我尝试检索用户的书签时,这就是我得到的:
ActiveRecord::HasManyThroughSourceAssociationNotFoundError (Could not find the source association(s) "bookmark" or :bookmarks in model Activity.
答案 0 :(得分:0)
是的,你可以做
在/app/models/activity.rb
文件中添加belongs_to :bookmark
,如果您想belongs_to :user
使用has_many :users, through: :activities
,则可以添加bookmarks.rb
。
如果您没有书签模型
多对多关系需要一个可用于连接两个模型的表。这里User和Activity是两个模型,并且要建立多对多的关系,之间必须存在另一个表,以便它们可以相关。在这里连接这两个表,您可以创建和使用user_activity表或书签表以及与此表关联的模型。
之后,您可以使用您所遵循的方法。 享受
答案 1 :(得分: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