我已经过度思考了这一点,我现在只是感到困惑。
我有一个Rails应用程序,其中包含以下模型:User,Site,Tutorial,TutorialStep。
用户可以创建许多教程,每个教程都有一个站点,每个教程都有很多教程步骤。
我遇到问题的模型是Site。
用户有很多教程,并有许多教程步骤通过教程。教程属于用户,有许多教程步骤,最后教程步骤属于教程。
现在网站应该属于用户和教程,还是仅仅是教程?
答案 0 :(得分:1)
我会按如下方式构建关系:
class User < ApplicationRecord
has_many :tutorials
has_many :sites, through: :tutorials
...
end
class Site < ApplicationRecord
has_many :tutorials
has_many :users, through: :tutorials
...
end
class Tutorial < ApplicationRecord
has_many :tutorial_steps
belongs_to :user
belongs_to :site
...
end
class TutorialStep < ApplicationRecord
belongs_to :tutorial
...
end
使Site
属于User
仅将该网站绑定到单个用户,这意味着多个用户无法在同一网站上放置教程,您必须重复输入同样的网站能够实现这一点,在我看来这不是很好的模型设计,因为如果在现实生活中多个用户在同一个网站上有不同的教程,你希望能够在模型和数据中反映出相同的行为。因此,如果您希望能够引用User
中的网站,并引用Site
中的用户,我建议在链接它们的表上使用多个关系,即教程表,就像我上面所示。
答案 1 :(得分:0)
has_many :tutorials
has_many :tutorials
has_many :tutorial_steps
belongs_to :user
belongs_to :site
教程需要网站ID和用户ID才能正确地将关联映射到用户和网站
教程表(... user_id,site_id)
答案 2 :(得分:0)
看起来应该是这样,
user.rb
has_many :tutorials
has_many :tutorial_steps, through: :tutorials
site.rb
has_many :tutorials
tutorial.rb
has_many :tutorial_steps
belongs_to :user
belongs_to :site
tutorial_step.rb
belongs_to :tutorial
has_one :user, through: :tutorial
has_one :site, through: :tutorial
希望有所帮助!
答案 3 :(得分:0)
据我所知,您可以使用has_one
关系。
has_one:指定与其他类的一对一关联
您可以创建与网站和教程
的has_one关系应用程序/模型/ user.rb
has_many :tutorials,->{ includes :site}
has_many :tutorial_steps, through: :tutorials
包含eager loading
技术,可让您随教程关系
应用程序/模型/ tutorial.rb
belongs_to :site
belongs_to :user
has_many :tutorial_steps
应用程序/模型/ site.rb
has_one :tutorial
应用程序/模型/ tutorial_step.rb
belongs_to :tutorial