钢轨关联 - 您将如何表达这种关系?
我想弄清楚表示下列关系的最佳方法。钢轨关联 - 您将如何表达这种关系?
Newspaper has_many Articles Newspaper has_many Subscribers
订户被允许保存他们的个人页面的文章。
两个问题:
1)关系如何在轨道中看起来像? “保存”操作看起来如何?
的使用的has_many似乎以下不正确的对我说:
class ArticleController < ApplicationController def save
a = Article.find(101)
@user.saved_articles << a
end
end
2)我是否需要加入一个看起来像这个表Saved_Articles?
Saved_Articles ----------------
user_id, article_id
回答:
你所描述的是一种多对多的关系。在Rails的协会而言,这是定义它的一种方式:
class Newspaper has_many :articles
has_many :subscribers
end
class Subscriber
belongs_to :newspaper
has_and_belongs_to_many :articles
end
class Article
belongs_to :newspaper
has_and_belongs_to_many :subscribers
end
使用has_and_belongs_to_many
,您将需要一个连接表,但它需要被调用articles_subscribers
而且会对subscriber_id
和article_id
领域:
articles_subscribers --------------------
article_id
subscriber_id
你save
行动,那么看起来像以下,假设@user
是的Subscriber
一个实例:
class ArticlesController < ApplicationController def save
@user.articles << Article.find(params[:id])
# handle the response - render or redirect
end
end
有关更多信息,请参见http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many上has_and_belongs_to_many
回答:
回答第1:
在模型/ newspaper.rb: 的has_many:文章 的has_many:用户
在控制器/ newspapers_controller。 rb
def create
@newspaper = NewsPaper.new(params[:newspaper])
if @newspaper.save
redirect_to
else
render :new
end
end
回答:
问题#2的答案: 对此,您不需要连接表。只有3个单独的表格(报纸,文章和订阅者)会很好。 newspaper_id的外键将出现在文章和订阅者中。
以上是 钢轨关联 - 您将如何表达这种关系? 的全部内容, 来源链接: utcz.com/qa/260442.html