我一直在做railscast 111高级搜索表单。我应该能够输入关键字,这些关键字可以在用户个人资料中找到,例如“无孩子,亚洲人”,然后应该显示他们个人资料中没有孩子的用户。如果我在搜索表单中输入“asian”,则会出现以下错误“找不到使用id = asian的搜索”。修复搜索表单来拉关键字,而不是id值
我相信我知道混淆来自何处。在高级搜索表单中,我们可以根据id来提取数据,例如每个种族都会分配一个1-10的值(1是亚洲自首选以来的数值)。这同样适用于其他选项,例如教育,性别等。但是,对于在索引页上找到的基本搜索表单,它不应该试图从“ID”中拉出。它应该允许我根据用户数据库中的信息(包含他们的所有个人资料信息)进行全文搜索。
错误指向了搜索控制器产品线:
def index
@search = Search.find(params[:search])
我认真一直在试图解决这个很长一段时间,我不能换我的头周围。我尝试了很多不同的解决方案,我似乎无法做到。如果有人能帮助我指出正确的方向,将不胜感激!
搜索控制器:
def new
@search = Search.new
end
def create
@search = Search.new(params[:search])
if @search.save
redirect_to @search
else
render 'new'
end
end
def show
@search = Search.find(params[:id])
@users = @search.users
end
def index
@search = Search.find(params[:search])
end
end
搜索模式:
def users
@users ||= find_users
end
private
def find_users
users = User.order(:id)
users = users.where(gender: gender) if gender.present?
users = users.where(zip_code: zip_code) if zip_code.present?
users = users.where(children: children) if children.present?
users = users.where(religion: religion) if religion.present?
users = users.where(ethnicity: ethnicity) if ethnicity.present?
users
end
end
new.html(索引页搜索表单上):
<%= form_tag searches_path, method: :get do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= button_tag "Search", name: nil %>
</p>
<% end %>