[英]Rails query works in console but not in view
我一直在為Rails構建實踐應用程序。 這是一個簡單的博客應用程序,只有文章模型和標記系統,使用Postgresql Arrays完成。 一切都很好,除了我無法使特定標簽的頁面正常工作。
用於獲取與給定標簽匹配的帖子的Activerecord查詢在Rails控制台中正常工作,但是在使用View嘗試時,同樣失敗。 我已經驗證並且參數正在傳遞,請幫助。。我沒有收到任何錯誤消息,據我了解,作為對視圖的查詢結果,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控制台中有效。
您的原始代碼將原義的'params[:tag]'
字符串發送到數據庫,並且不知道如何處理。 結果查詢如下所示:
SELECT * FROM articles WHERE ('params[:tag]' = ANY (tags));
這只會返回實際上已用文字"params[:tag]"
字符串"params[:tag]"
。
我想您打算將params[:tag]
替換為來自params
的實際標簽值。 為此,您需要執行以下操作:
Article.where(['? = ANY (tags)', params[:tag]])
這將導致將類似的內容發送到數據庫(將params[:tag]
設置為"foo"
為fx):
SELECT * FROM articles WHERE ('foo' = ANY (tags));
這更可能是您想要的。
如果您想了解有關如何使用Active Record構造查詢的更多信息,那么Active Record Query Interface指南中有關條件的部分是一個很好的起點。
但是,在官方文檔中可能找不到有關使用PostgreSQL數組的任何內容,因為這不是一般的數據庫功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.