0

我有一个用户注册表:

<%= form_for(resource, :as => resource_name, 
        :url => registration_path(resource_name), 
        :id => "employer-form") do |f| %>
    <%= devise_error_messages! %>

    <p><%= f.email_field :email, :autofocus => true, :title => "Enter email", :value =>"Enter Email", :class =>"field" %></p>

    <p><%= f.text_field :profile_name, :autofocus => true, :title => "Enter Username", :value => "Enter Username", :class =>"field" %></p>


    <p class="clearfix">
       <%= f.password_field :password, :title => "Enter Password", :value => "Enter Password", :class => "field field-half" %>
       <%= f.password_field :password_confirmation, :title => "Retype Password", :value => "Retype Password", :class => "field field-half" %>     
    </p>

    <p class="clearfix"> 
       <%= f.text_field :first_name, :title => "Enter First Name", :value => "Enter First Name", :class => "field field-half" %>
       <%= f.text_field :last_name, :title => "Retype Last Name", :value => "Enter Last Name", :class => "field field-half" %>
    </p>

    <p class="clearfix">
       <div class="custom-select">
           <%= f.select_tag(:how_did_you_hear, options_for_select
               ([["Bing", :bing],["College Rep", :college_rep],
               ["Facebook", :facebook],["Google", :google],
               ["Pinterest", :pinterest],["Yahoo", :yahoo],
               ["Twitter", :twitter],["Other", :other]])) %>
       </div>  
    </p>

    <div><%= f.submit "Sign up" %></div>
 <% end %>

如果我去掉“f”,选择标签就起作用了。就在它之前。但如果我把它拿走,它就不会进入用户对象。如果我把“f”。在,它说:

undefined method `select_tag' for #<ActionView::Helpers::FormBuilder:0x007f950db434e0>

我见过一些类似但无济于事的stackoverflow问题。文档简要地提到了这一点,但对于像我这样的新手来说太复杂了,无法理解。

4

2 回答 2

5

因为它是f.select,不是f.select_tag。请参阅http://guides.rubyonrails.org/form_helpers.html#select-boxes-for-dealing-with-models

于 2013-10-23T15:22:01.320 回答
3

select_tag是创建<select>元素的基本 ActionView 助手。使用表单构建器元素时,您通常需要构建器的#select方法,例如:

<%= f.select :how_did_you_hear, [["Bing", :bing], ...

表单构建器方法作为构建操作的一部分调用select_tag,但它正确命名了元素,以便在提交表单时传回的结果作为散列的一部分包含在params哈希中,以便于更新资源。

当然,这假设您的模型具有how_did_you_hear属性。

于 2013-10-23T15:30:40.560 回答