如何将一个模型的属性作为参数传递给另一个模型?

How to pass attribute of one model as a param to a different model?

我有一个 Favorite 模型和一个 Article 模型。 Favorite 的属性 fav_id 等于 Articleid。 我想创建一个 link_to @article.title 并传递 :id=>@favorite.fav_id.

的参数

favorites控制器代码:

def show
  @favorite = Favorite.find(params[:id])
  @article = Article.find(params[:id])
end

view/favorite/show代码:

<%= link_to @article.title, article_path(:controller=>:article, :id=>@favorite.fav_id, :action=>'view')

当我加载页面时,使用了 favorite id,这很好。我只想将 favorite.fav_id 传递给 @article = Article.find(params[:id])。这样,link 将显示文章标题而不是数字 (fav_id)。将来 id 也希望能够显示 @article.description 和其他属性。

我也考虑过将文章属性传递给收藏夹,但这似乎会给数据库带来较重的负载,所以我到目前为止一直避免这样做

我也试过 :through => association。可能是我做错了,但是我试了一下:through没有用。有什么建议吗?

Rails 4.2.0
Ruby2.1.5

我不太清楚你要得到什么,但是这个: `

def show
  @favorite = Favorite.find(params[:id])
  @article = Article.find(params[:id])
end

完全错误。您正在尝试使用相同的 :id 参数来查找文章和收藏夹。我认为这不是您正在等待的行为。

The Favorite has an attribute of .fav_id

还有,为什么最喜欢的模型有fav_id属性?是单Table继承吗?还是什么? Rails 方式是,例如,最喜欢 article_id

如果您的 Favorite 模型有一个指向另一个模型 (Article) 的属性,这意味着,根据定义,这些模型之间存在 association。因此,您应该在模型中明确设置该关联。

首先你需要定义association type。在你的情况下,它可以是一个 has_one 关联,如果 article 可能只对应一个 favoritehas_many 关联,如果一个 article 可能对应多个favorits(多个收藏夹可以保存fav_id)。

然后您需要在 ArticleFavorite 模型中设置您的关联。

在你的 app/models/article.rb 中它会是这样的:

has_one :favorite, foreign_key: :fav_id

在你的 app/models/favorite.rb 中它会是这样的:

belongs_to :article, foreign_key: :fav_id

我建议您通过将字段名称从 fav_id 更改为 article_id 来简化它,这样您就可以在两个定义中删除 foreign_key 参数。

请务必阅读 the API docs 以获取有关使用关联的更多信息。

设置该关联后,您可以在控制器中轻松使用它。

def show 
   @favorite = Favorite.find params[:id]
   @article = @favorite.article
end

然后在您的视图中使用 link_to @article.title, @article