簡體   English   中英

Rails查詢可在控制台中使用,但不能在視圖中使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM