Ruby on Rails : 高级搜索,nil:Nil class 的未定义方法 [ ]
Ruby on Rails : Advance search, undefined method [ ] for nil:Nil class
我是 rails 的新手,我尝试制作一个高级搜索表单,该表单采用两个值 'blood_group' 和 'area',并基于该搜索从数据库中获取记录并将显示在同一页面上 (find.html.erb)
我已经在 find.html.erb 中尝试了一些方法,但是在我的搜索表单存在的地方发生了错误 'undefined method [] for 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
结束
您的搜索表单必须是这样的:
<%= 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显示搜索到的内容
我是 rails 的新手,我尝试制作一个高级搜索表单,该表单采用两个值 'blood_group' 和 'area',并基于该搜索从数据库中获取记录并将显示在同一页面上 (find.html.erb) 我已经在 find.html.erb 中尝试了一些方法,但是在我的搜索表单存在的地方发生了错误 'undefined method [] for 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
结束
您的搜索表单必须是这样的:
<%= 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显示搜索到的内容