select_tag不保存所选选项

时间:2014-06-08 18:06:33

标签: ruby-on-rails forms

我是网络开发的新手。轨。我一直在努力理解为什么我的表单没有完全保存。以下是我使用的代码:

  <div class="field">
    <%= f.label :type %><br>
    <%= select_tag(:type, options_for_select([['Verb', 'Verb'], ['Adjective', 'Adjective'], ['Noun','Noun'],['Preposition','Preposition'],['Article','Article'],['Adverb','Adverb']])) %>
  </div>
  <div class="field">
    <%= f.label :category %><br>
    <%= select_tag "category",
                   "<option>Appliances</option>
                    <option>Clothes and Accessories</option>
                    <option>Colours</option>
                    <option>Communication and Technology</option>
                    <option>Documents and Texts</option>
                    <option>Education</option>
                    <option>Entertainment and Media</option>
                    <option>Family and Friends</option>
                    <option>Food and Drink</option>
                    <option>Health, Medicine and Exercise</option>
                    <option>Hobbies and Leisure</option>
                    <option>House and Home</option>
                    <option>Measurements</option>
                    <option>Personal Feelings, Opinions and Experiences (adjectives)</option>
                    <option>Places: Buildings</option>
                    <option>Places: Countryside</option>
                    <option>Places: Town and City</option>
                    <option>Services</option>
                    <option>Shopping</option>
                    <option>Sport</option>
                    <option>The Natural World</option>
                    <option>Time</option>
                    <option>Travel and Transport</option>
                    <option>Weather</option>
                    <option>Work and Jobs</option>".html_safe %>
  </div>

PS:我保留了两种尝试使用的不同方法。

3 个答案:

答案 0 :(得分:2)

使用f.select代替select_tag

f.select(:type, [['Verb', 'Verb'], ['Adjective', 'Adjective'], ['Noun','Noun'],['Preposition','Preposition'],['Article','Article'],['Adverb','Adverb'])

或者如果您正在使用form_for并传递一个对象,那么您也可以按照以下步骤进行操作。

select_tag(:type, options_for_select([['Verb', 'Verb'], ['Adjective', 'Adjective'], ['Noun','Noun'],['Preposition','Preposition'],['Article','Article'],['Adverb','Adverb']],f.object.type))

我们将type的值从实际对象传递给select的选项。 当您使用option_for_select时,它希望您将所选值作为第二个参数发送。

答案 1 :(得分:0)

options_for_select还会获取第二个参数,即所选值。

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_for_select

# this will show Preposition selected
options_for_select([['Verb', 'Verb'], ['Adjective', 'Adjective'], ['Noun','Noun'],['Preposition','Preposition'],['Article','Article'],['Adverb','Adverb']], 'Preposition')

为了将来参考,请在发布问题时始终指定Rails版本。

我注意到您使用的是f.label,在这种情况下,您可能还想查看http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select

HTH

答案 2 :(得分:0)

对于第一个,你应该使用f.select而不是select_tag,rails标签是生成html元素的助手,但是在这种情况下你需要一个链接到你的表单的项目,所以你使用表单助手来选择代替。

对于另一个例子,我不确定它是否会像那样工作,但尝试使用相同的想法,你应该发现select被传递给你的控制器,也使用符号名而不是字符串名称,含义:类别而不是&#34;类别&#34;,如果你想要一个类似&#34的短语;选择一个类别....&#34;最后添加另一个选项:prompt =&gt; &#34;选择一个类别......&#34;,希望它有帮助,看看Ryan Bates网站,是学习铁路的好地方