我有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
答案 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
可能只对一个article
或favorite
关联,如果一个has_many
可能对应,则article
关联为favorits
关联多个fav_id
(多个优惠可以保存Article
)。
然后,您需要在Favorite
和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
来简化此操作,以便您可以在两个定义中删除def show
@favorite = Favorite.find params[:id]
@article = @favorite.article
end
参数。
请务必阅读the API docs,了解有关使用关联的更多信息。
设置该关联后,您可以在控制器中轻松使用它。
link_to @article.title, @article
然后在您的视图中使用{{1}}。