我正在尝试创建一个用于创建Rank类实例的字段。它已经具有设置params[:ranking][:comment]的注释字段,但是现在我想添加一个显示类似以下内容的下拉列表:

1:糟糕,2:贫穷,3:中庸,4:良好,5:伟大

我希望这些将params [:ranking] [:score]的值设置为1-5,以便在我的create方法中可以执行以下操作:

 @ranking = Ranking.new( #....
                        :score => params[:ranking][:score])


我的表格现在看起来像这样:

<%= form_for([@essay, @ranking]) do |f| %>
  <%= render 'shared/error_messages', :object => f.object %>
  <div classs="field">
    <%= f.text_area :comment %>
  </div>
  <div classs="field">
      <%= #something here!%>
  </div>
  <div class="actions">
    <%= f.submit "Submit" %>
  </div>
<% end %>


我知道我需要使用collection_select,但无法使其正常工作。

最佳答案

您应该只可以使用常规的select帮助器来进行如下操作:

f.select :score, [['horrible', 1], ['poor', 2], ['mediocre', 3], ['good', 4], ['great', 5]]


如果您有分数模型,则可以使用collection_select。就像是:

f.collection_select :score_id, Score.all, :id, :name


请参阅collection_select的API文档

10-05 19:41