2013-06-29 21 views
0

我一直在做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 %> 

回答