繁体   English   中英

PostgreSQL全文搜索不会从Rails中的表单中获取参数

[英]PostgreSQL Full Text search does not take params from form in Rails

我正在尝试使用以下代码在我的rails应用程序中复制railscast#343:

class Article < ActiveRecord::Base
  def self.text_search(query)
    if query.present?
      where("description @@ :q", q: query)    
    else
      where(nil)
    end
  end

class ArticlesController < ApplicationController
  def index
    @articles = Article.text_search(params[:query])
  end

而这种观点形式:

<%= simple_form_for articles_path, method: :get do |f| %>
  <%= f.input :query, autofocus: true, label: false %>
  <%= f.submit 'Search', name: nil %>
<% end %>

在控制台text_search方法工作。 来自日志: Parameters: {"utf8"=>"✓", "/en/articles"=>{"query"=>"word"}, "locale"=>"en"}我看到params被发送但是我仍然列出所有文章并且没有执行搜索: Article Load (0.5ms) SELECT "articles".* FROM "articles"

我有rails 4.2.2,PostgreSQL 9.3.7,ruby 2.2.5

您需要将搜索参数传递为:

Article.text_search(params[:search]["query"]) 

并将@article添加到simpleform_for行:

<%= simple_form_for @article, articles_path, method: :get do |f| %>

并将@article = Article.new添加到控制器中的新操作。

然后你的属性将嵌套在里面:文章! 您可以在控制台输出中看到,文章表单发送的参数将始终包含在表单所用的类名称(文章)中,通过Rails Form帮助程序。

更新:

因为simple_form_for没有特别传递给@article ,所以它将被包装在提交操作的名称中,在这种情况下是提交操作。 离开你: params[:search]["query"]

更多的Rails方法是包含@article从而包装你的参数哈希,如上所述( params[:article][:query] ):

<%= simple_form_for @article, {url here}, {options like 'method: :get' or 'remote: true' here } do |f| %>

有关额外信息。 由于每个人都喜欢额外的信息,Rails提供了一种在form_for调用中为params哈希指定包装器名称的方法,因此您还可以执行以下操作:

<%= simple_form_for (@article, as: :search), articles_path, method: :get do |f| %>

如果你真的想让params包含在'search'IMO中,这是最好的做法,因为你在表单调用中指定了类对象,并让自己知道它对该对象做了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM