Ruby on Rails:高级搜索,未定义方法[]为nil:Nil类

时间:2015-06-02 09:15:29

标签: ruby-on-rails advanced-search

我对rails非常陌生,并尝试制作一个预先搜索表单,其中包含两个值' blood_group'和' area'并根据该搜索获取数据库中的记录,并显示在同一页面上(find.html.erb)      我在find.html.erb中尝试了一些东西,但是发生错误'未定义的方法[]为nil:Nil class'我的搜索表单存在的位置。请帮助摆脱这个错误。

这是我在find.html.erb

中的搜索表单
<%= form_tag find_path , method: :get do %>

             <p> <%= label_tag :blood_group %><br />
              <%= select_tag (:blood_group), options_for_select(%w[ A+ B+ O+ AB+ A- B- O- AB-]), params[:blood_group] %> </p>

             <p> <%= label_tag :area %><br />
              <%= select_tag (:area), options_for_select(%w[Indore Vijay_Nagar Bhawar_Kuwa Rajendra_Nagar Geeta_Bhawan Aerodram Tejaji_Nagar Raj_Mohalla Rajwada Chandan_Nagar Gandhi_Nagar Arvindo MY Bombay_Hospital]) , params[:area] %> </p> 


              <%= submit_tag "Search" , class: "btn btn-primary" , name: nil %>
            <% end %>

错误出现在我使用select标签的行上。 以下是我在Donor控制器中的查找动作

def find

    @donors = Donor.search(params[:blood_group], params[:area]).all 

 end

Donor.rb如下

class Donor < ActiveRecord::Base


def self.search(blood_group, area)

    return all unless blood_group.present? || area.present?

    where(['blood_group LIKE ? AND area LIKE ?', "%#{blood_group}%", "%#{area}%"])
end

1 个答案:

答案 0 :(得分:0)

您的搜索表单必须如下:

<%= form_tag find_path , method: :get, remote: true do %>

         <p> <%= label_tag :blood_group %><br />
          <%= select_tag (:blood_group), options_for_select(%w[ A+ B+ O+ AB+ A- B- O- AB-]) %> </p>

         <p> <%= label_tag :area %><br />
          <%= select_tag (:area), options_for_select(%w[Indore Vijay_Nagar Bhawar_Kuwa Rajendra_Nagar Geeta_Bhawan Aerodram Tejaji_Nagar Raj_Mohalla Rajwada Chandan_Nagar Gandhi_Nagar Arvindo MY Bombay_Hospital]) %> </p> 


          <%= submit_tag "Search" , class: "btn btn-primary" , name: nil %>
        <% end %>

将您的控制器修改为:

def find
  @donors = Donor.search(params[:blood_group], params[:area]).all 
  respond_to do |format|
    format.js
  end
end

然后添加find.js.erb以显示搜索到的内容。