ruby on rails-选择表单帮助器的问题

时间:2010-03-17 14:09:25

标签: ruby-on-rails select

我有一个表格,巫婆用户可以添加他们的工作时间查看和编辑它们(全部在一页)。添加工作时间时,用户必须从下拉列表中选择项目。如果操作正在添加新的小时记录,则下拉字段应保持为空(未选中)以防操作被编辑,应使用适当的值选择下拉字段。 为了克服这个挑战,我写了以下代码

<% if params[:id].blank?%>
     <select name="hour[project_id]" id="hour_project_id">
         <option value="nil">Select Project</option>
         <% @projects.each do|project|%>
             <option value="<%=project.id %>"><%=project.name%></option>
         <% end%>
    </select>
 <% else %>
   <%= select('hour','project_id', @projects.collect{|project|[project.name,project.id]},{:prompt => 'Select Project'})%>
 <% end %>

因此,在保存操作的情况下,我只使用html执行下拉列表,并且在编辑操作的情况下,我使用了collect方法。它工作正常,直到我尝试编码错误。问题是,当我使用错误方法时:validates_presence_of:project_id它不会在下拉列表的html表单中识别它,也不会显示错误消息(它仅适用于使用collect方法的下拉列表)。 / p>

我将非常感谢您在此事上的指示和帮助

1 个答案:

答案 0 :(得分:1)

options_from_collection_for_select(collection,value_method,text_method,selected = nil)是你的朋友:

<%= select('hour','project_id', options_from_collection_for_select(@projects, :id, :name, @hour.project_id),{:prompt => 'Select Project'})%>

如果有一个@hour对象并且它是新的且因此没有project_id,则该值将为nil并且不会选择任何内容 - 或者将选择@hour的值。