如何将一个模型的属性作为参数传递给另一个模型?
How to pass attribute of one model as a param to a different model?
我有一个 Favorite
模型和一个 Article
模型。 Favorite
的属性 fav_id
等于 Article
的 id
。
我想创建一个 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
可能只对应一个 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
参数。
请务必阅读 the API docs 以获取有关使用关联的更多信息。
设置该关联后,您可以在控制器中轻松使用它。
def show
@favorite = Favorite.find params[:id]
@article = @favorite.article
end
然后在您的视图中使用 link_to @article.title, @article
。
我有一个 Favorite
模型和一个 Article
模型。 Favorite
的属性 fav_id
等于 Article
的 id
。
我想创建一个 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
可能只对应一个 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
参数。
请务必阅读 the API docs 以获取有关使用关联的更多信息。
设置该关联后,您可以在控制器中轻松使用它。
def show
@favorite = Favorite.find params[:id]
@article = @favorite.article
end
然后在您的视图中使用 link_to @article.title, @article
。