表单字段的未定义方法

时间:2013-04-24 15:45:49

标签: ruby-on-rails

我正在开发一个高级搜索表单。我正在观看/搜索。现在我为我一直在使用的用户个人资料创建了属性,例如邮政编码,年龄,性别,职业,宗教,教育等。我想将这些字段用于我的高级搜索。

当我包含f.label和文本字段时,我得到一个未定义的方法。我希望我不必为搜索表单重新创建每个属性,因为考虑到我已经为用户配置文件完成了所有这些属性,这没有多大意义。任何帮助将不胜感激!

/searches/new.html(搜索):

<%= form_for @search do |f| %>
    <div class="field">
        <%= f.label :keywords %><br/>
        <%= f.text_field :keywords%>
    </div>
    <div class="field">
        <%= f.label :zip_code %><br/>
        <%= f.text_field :zip_code %>
    </div>

    <div class="actions"><%= f.submit "Search" %></div>
    <% end %>

/users/new.html(针对用户个人资料):

<%= form_for @user do |f| %>
  <% if @user.errors.any? %>
    <div class="error_messages">
      <h2>Form is invalid</h2>
      <ul>
        <% @user.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

    <div class="field">
        <%= f.label :email %><br/>
        <%= f.text_field :email %>
    </div>
    <div class="field">
        <%= f.label :password %><br/>
        <%= f.password_field :password %>
    </div>
    <div class="field">
        <%= f.label :username %><br/>
        <%= f.text_field :username %>
    </div>
    <div class="field">
        <%= f.label :zip_code %><br/>
        <%= f.text_field :zip_code %>
    </div>
    </div>
    <div class="field">I'm a
            <%= f.select :gender, ['man', 'woman']%>
            interested in 
            <%= f.select :gender, ['women', 'men', 'both']%>
            </div>
            <div class="field">
            Age <%= select(@object, :age, (18..75).to_a) %> to  <%= select(@object, :age, (18..75).to_a) %>
            </div>
    <div class="actions"><%= f.submit %></div>
<% end %>

1 个答案:

答案 0 :(得分:1)

您的@search对象是Search对象(或实际上的任何对象),而不是User

Rails不知道你的Search对象实际上没有那些字段,所以当它试图检索不存在的字段时,它会爆炸。

有很多方法可以解决这个问题,包括为Search User属性提供。

你也可以创建一个新的User并将其传递给用户表单部分为f,这可能就是我要采取的方法,虽然我不知道它的确是什么样子没有尝试一下。