Rails 4 has_many 在同一模型中关联两次
Rails 4 has_many association twice in the same model
以下是关于我当前问题的一些信息:
我有两个模型,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
many_to_many 和 'inbetween' 模型是否更合适?
关于上述方法,当我尝试检索用户的书签时,这是我得到的:
ActiveRecord::HasManyThroughSourceAssociationNotFoundError (Could not find the source association(s) "bookmark" or :bookmarks in model Activity.
是的,你可以做到
在您的 /app/models/activity.rb
文件中添加 belongs_to :bookmark
,如果您想使用 has_many :users, through: :activities
到 bookmarks.rb
,您可以添加 belongs_to :user
。
如果您没有书签模型
多对多关系需要一个 table 可以用来连接两个模型。这里 User 和 Activity 是两个模型,要建立多对多关系,则必须存在另一个 table ,以便它们可以关联。这里要连接这两个 table,您可以制作并使用 user_activity table 或书签 table 以及与此 table.
关联的模型
之后您可以使用您正在遵循的方法。
享受
我尝试做事的方式无效且行不通。就像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
我们还需要创建一个新的迁移来添加书签table
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
以下是关于我当前问题的一些信息:
我有两个模型,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
many_to_many 和 'inbetween' 模型是否更合适?
关于上述方法,当我尝试检索用户的书签时,这是我得到的:
ActiveRecord::HasManyThroughSourceAssociationNotFoundError (Could not find the source association(s) "bookmark" or :bookmarks in model Activity.
是的,你可以做到
在您的 /app/models/activity.rb
文件中添加 belongs_to :bookmark
,如果您想使用 has_many :users, through: :activities
到 bookmarks.rb
,您可以添加 belongs_to :user
。
如果您没有书签模型
多对多关系需要一个 table 可以用来连接两个模型。这里 User 和 Activity 是两个模型,要建立多对多关系,则必须存在另一个 table ,以便它们可以关联。这里要连接这两个 table,您可以制作并使用 user_activity table 或书签 table 以及与此 table.
关联的模型之后您可以使用您正在遵循的方法。 享受
我尝试做事的方式无效且行不通。就像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
我们还需要创建一个新的迁移来添加书签table
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