钢轨关联 - 您将如何表达这种关系?

我想弄清楚表示下列关系的最佳方法。钢轨关联 - 您将如何表达这种关系?

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_idarticle_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

回到顶部