0

好的,我能够通过搜索克服这座山,并让结果正确显示。但是,我注意到只有一个搜索选项有效。其余部分给出了“'nil' 不是返回有效部分路径的 ActiveModel 兼容对象”。即使我将编码恢复到旧版本。这很奇怪,因为我的搜索非常适合 Ethnicity,但对于表单的其他部分,它会返回该错误。也许一些新鲜的眼睛可以抓住罪魁祸首。

在我的高级搜索页面上澄清。如果我进行种族搜索,结果会出现。如果我进行任何其他搜索,例如宗教、性别、儿童等,它会给出零错误。搜索页面中的一个选项有效,而当所有选项都具有相同的编码时,其余选项无效,这是没有意义的。似乎它没有为它找到用户。错误指向“ 3 <%= render @users %>”

显示.html:

<h1>Search Results</h1>

<%= render @users %>

搜索控制器:

  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

end

搜索型号:

 attr_accessible :age, :children, :ethnicity, :gender, :religion, :zip_code

  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?
  end
end

搜索表格(底部显示的种族没有错误):

<h1>Advanced Search</h1>

<%= form_for @search do |f| %>
<div class="field">
  <%= f.label :gender %><br />
  <%= f.select :gender, ['man', 'woman'], :include_blank => true %>
</div>

  <div class="field">
    <%= f.label :zip_code %><br />
    <%= f.text_field :zip_code %>
  </div>
  <div class="field">
    <%= f.label :children %><br />
    <%= f.select :children, ['Yes, they live with me', 'I want kids now', "I want one someday", "Not for me"], :include_blank => true %>
  </div>
  <div class="field">
    <%= f.label :religion %><br />
    <%= f.select :religion, [["Agnostic", "1"], ["Atheist", "2"], ["Christian", "3"], ["Catholic", "4"], ["Buddhist", "5"], ["Hindu", "6"], ["Jewish", "7"], ["Muslim", "8"], ["Spiritual without affiliation", "9"], ["Other", "10"], ["None", "11"], ["Prefer not to say", "12"]], :include_blank => true %>
  </div>
  <div class="field">
    <%= f.label :ethnicity %><br />
    <%= f.select :ethnicity, [["Asian", "1"], ["Biracial", "2"], ["Indian", "3"], ["Hispanic/Latin", "4"], ["Middle Eastern", "5"], ["Native American", "6"], ["Pacific Islander", "7"], ["White", "8"], ["Other", "9"]], :include_blank => true %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>
4

1 回答 1

4

那是因为在find_users方法的最后你需要返回数组:

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 # this line is important!
end

它仅适用于种族,因为这是最后一个,如果缺少种族,则此方法将返回nil而不是用户数组。

于 2013-05-13T15:28:49.210 回答