我一直在为rails构建练习应用程序。这是一个简单的博客应用程序,只有文章模型和使用Postgresql Arrays完成的标记系统。一切都很好,除了,我无法得到特定标签的页面工作。
用于获取与给定标记匹配的帖子的Activerecord查询在rails控制台中正常工作,但在使用View进行尝试时同样失败。我已经验证并且params正在通过,请帮助..我没有收到任何错误消息,从我可以理解的rails通过 ActiveRecord :: Relation :: ActiveRecord_Relation_Article 作为结果查询视图,但视图文件无法按列表列出...
以下是相关文件,
的routes.rb
get 'tags/:tag', to: 'articles#tagview', as: :tag
articles_controller.rb
def tagview
@articles = Article.where("'params[:tag]' = ANY (tags)")
end
tagview.html.erb
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.content %></td>
<td><%= article.tags.join(" ") %></td>
</tr>
<% end %>
结果页面只是空白。而上述查询在Rails控制台中有效。
答案 0 :(得分:3)
您的原始代码会向数据库发送一个文字'params[:tag]'
字符串,但它不知道如何处理它。生成的查询类似于:
SELECT * FROM articles WHERE ('params[:tag]' = ANY (tags));
这只返回实际上用文字"params[:tag]"
字符串标记的文章。
我想您打算将params[:tag]
替换为来自params
的实际标记值。要做到这一点,你需要做类似的事情:
Article.where(['? = ANY (tags)', params[:tag]])
这将导致这样的内容被发送到数据库(当params[:tag]
设置为"foo"
时为fx):
SELECT * FROM articles WHERE ('foo' = ANY (tags));
更有可能成为你想要的东西。
如果您想了解有关如何使用Active Record构建查询的更多信息,section about Conditions in the Active Record Query Interface guide是一个很好的起点。
你可能在官方文档中找不到任何关于使用PostgreSQL数组的内容,因为这不是一般的数据库功能。