我一直在做 railscast 111 高级搜索表单。我应该能够输入可以在用户个人资料上找到的关键字,例如“没有孩子,亚洲人”,然后它应该在他们的个人资料上显示没有孩子的用户,亚洲人。如果我在搜索表单中输入“亚洲”,我会收到以下错误“找不到 id=asian 的搜索”。
我相信我知道混乱来自哪里。在高级搜索表单中,我有它,以便它根据 id 提取数据,例如每个种族都分配一个值 1-10(1 是亚洲人,因为它是第一次选择)。同样适用于其他选项,例如教育、性别等。但是对于在索引页面上找到的基本搜索表单,它不应该尝试从“ids”中提取。相反,它应该只允许我根据用户数据库中的信息(包含他们的所有个人资料信息)进行全文搜索。
错误指向搜索控制器中的行:
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 %>