我想找出一种代表以下关系的最佳方式。
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
答案 0 :(得分:3)
您所描述的是多对多关系。就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
有关has_and_belongs_to_many
答案 1 :(得分:1)
回答问题#1 :
在models / newspaper.rb中: has_many:文章 has_many:订阅者
in controllers / newspaper_controller.rb
def create @newspaper = NewsPaper.new(params[:newspaper]) if @newspaper.save redirect_to else render :new end end
答案 2 :(得分:1)
回答问题#2 : 你不需要一个联接表。只需3张独立的桌子(报纸,文章和订阅者)就可以了。 newspaper_id的外键是文章和订阅者。