Ruby on Rails搜索返回一切

时间:2015-04-26 17:23:41

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

好的伙计我知道在我的第一个ROR应用程序聚集在一起的最后几天我有很多初学者的问题(本周三的beta截止日期)。一切都很好,除了我在测试我的应用时遇到的一次打嗝。

该应用程序适用于赌场,以便他们处理背景调查。我有一个申请人模型,申请人有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>

2 个答案:

答案 0 :(得分:1)

这应该有效:

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

因为您的表单包含以下文本字段:

  <%= text_field_tag(:q) %>

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

答案 1 :(得分:0)

更改此行

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

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

BOOM!

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