【问题标题】:Ruby on Rails Search Returns EverythingRuby on Rails 搜索返回所有内容
【发布时间】:2015-04-26 17:23:40
【问题描述】:

好的,伙计们,我知道过去几天我遇到了很多初学者问题,因为我的第一个 ROR 应用程序出现了(本周三测试截止日期)。一切都很好,除了我在测试我的应用程序时遇到的一个小问题。

该应用程序适用于赌场,以便他们处理背景调查。我有一个申请人模型,申请人有 first_name last_name 属性。我希望能够搜索申请人的索引页面,但是每当我在搜索中输入姓名时,浏览器都会返回所有申请人的新页面,而不仅仅是我正在寻找的那个......

我整个上午都在网上搜寻解决方案,但我没有运气。

这是我的申请者模型

class Applicant < ActiveRecord::Base
validates_presence_of :first_name, :last_name, :social, :dob
validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create }
validates :social, format: {with: /^(\d{3}-?\d{2}-?\d{4}|XXX-XX-XXXX)$/i, :multiline => true, on: :create}

def self.search(search)
  if search
    @applicants = Applicant.find(:all, :conditions => ['first_name    LIKE ?', "%#{search}%"])
  else
    @applicants = Applicant.all
  end
end
end

(抱歉缩进效果不佳,在我的文件中看起来更好) 我的控制器是这样的

       def index
       @applicants = Applicant.search(params[:search])
       end

我的观点看起来像

                     <section>
                <%= form_tag("/applicants", method: "get") do %>
                  <%= label_tag(:applicants, "Search for:") %>
                  <%= text_field_tag(:q) %>
                  <br>
                  <%= submit_tag("Search") %>
                <% end %>
                <br>
              </section>

【问题讨论】:

  • 你用的是Rails 4吗?能贴一下参数日志吗?

标签: ruby-on-rails ruby-on-rails-4 search


【解决方案1】:

这应该可行:

   def index
     @applicants = Applicant.search(params[:q])
   end

因为您的表单有这个文本字段:

  <%= text_field_tag(:q) %>

这意味着来自文本字段的值将在 params[:q] 中发送。

【讨论】:

  • 嘿,所以我继续将 q 更改为搜索(有点像你所说的倒退,但逻辑应该是相同的)但是现在我得到一个运行时错误:不支持的符号引用该行代码 尝试打印与搜索匹配的申请人时。感谢您的帮助!
  • 您使用的是哪个查询?如果您使用的是 RUBYCASTS.IO 评论中建议的申请人.where("first_name ILIKE ?", "%#{search}%"]) 那么这可能会导致问题,因为 ILIKE 运算符是特定于 postgresql数据库。如果您正在使用该查询并且您没有使用 postgres 数据库,请尝试在查询中将 ILIKE 更改为 LIKE。
  • 我切换回 @applicants = Apply.find(:all, :conditions => ['first_name LIKE ?', "%#{search}%"]) 我应该遵循其他建议吗?
  • 已解决!谢谢它最终成为了两个答案的组合,天哪,我今天离我的游戏还很远!非常感谢您的帮助
【解决方案2】:

改变这一行

@applicants = Applicant.find(:all, :conditions => ['first_name    LIKE ?', "%#{search}%"])

@applicants = Applicant.where("first_name ILIKE ?", "%#{search}%")

轰隆隆!

如果您需要进一步的实时配对帮助,可以查看我的代码指导页面 https://codementor.io/rubycasts/#reviews 并联系我寻求帮助。

【讨论】:

  • 我首先通过复制和粘贴尝试了这个解决方案,并得到了一个语法错误“]”所以我玩弄了 [] 并让它工作,但它仍然返回所有申请人。不过感谢您的帮助!
  • 新方法中不应该有任何 [ ] ......不确定你在做什么,但它已经工作了 5 到 6 年,所以我知道它有效。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
相关资源
最近更新 更多