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

时间:2015-03-07 20:17:30

标签: ruby-on-rails ruby-on-rails-4 parameter-passing params

我有Favorite模型和Article模型。 Favorite的属性fav_id等于id的{​​{1}}。 我想创建一个link_to Article并传递@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') id,这很好。我只想将favorite传递给favorite.fav_id。这样,链接将显示文章标题而不是数字(@article = Article.find(params[:id]))。在将来,id也能够显示fav_id和其他属性。

我还考虑将文章属性传递给收藏夹,但这似乎对数据库造成了更大的负担,所以到目前为止我已经避免了

我还试过@article.description。也许我做错了,但是当我尝试它时:through => association没有用。有什么建议吗?

Rails 4.2.0
Ruby 2.1.5

2 个答案:

答案 0 :(得分:0)

我无法清楚地知道你会得到什么,但是这个: `

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

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

  

收藏夹的属性为.fav_id

此外,为什么收藏夹模型具有fav_id属性?它是单表继承吗?或者是什么?例如,Rails方式是收藏夹article_id

答案 1 :(得分:0)

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

首先,您需要定义association type。在您的情况下,如果一个has_one可能只对一个articlefavorite关联,如果一个has_many可能对应,则article关联为favorits关联多个fav_id(多个优惠可以保存Article)。

然后,您需要在Favoriteapp/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来简化此操作,以便您可以在两个定义中删除def show @favorite = Favorite.find params[:id] @article = @favorite.article end 参数。

请务必阅读the API docs,了解有关使用关联的更多信息。

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

link_to @article.title, @article

然后在您的视图中使用{{1}}。