条件表单输入字段类型

时间:2011-06-25 22:08:47

标签: ruby-on-rails forms

Rails 2.3.11

我想在一个条件下使用text_field输入数据,否则使用选择框。现在,我的代码看起来像这样:

视图/海报/ new.html.erb

<% form_for @poster, :html => {:multipart => true} do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :image %> - We're not going to enlarge it for you, so please upload the biggest copy you can!<br />
    <%= f.file_field :image %><br />
  </p>


    <p>
    <% if current_user.admin? && params[:event_id] && !current_user.events.find_by_id(params[:event_id]) && Event.find_by_id(params[:event_id]) %>
      <%= f.label "Event ID" %><br />
      <%= f.text_field :event_id, :value => params[:event_id] %>
    <% else  %>
      <%= f.label :event_id %><br />
      <%= f.select :event_id, @events, :selected => params[:event_id].to_i %>
    <% end %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

控制器/ posters_controller.rb

def new
    @poster = Poster.new

    current_user ||= User.find_by_id session[:user_id]
    @events = [["Don't attach to an event", '']]
    current_user.events.each {|event| @events << [event.title, event.id]}

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @poster }
    end
end

错误消息http://cl1p.net/halp

如何为同一参数使用两种不同类型的表单输入字段(但每种情况都在不同条件下,而不是同时使用)?

更新:我认为问题源于Rails将之前提交的信息放回各自输入字段的问题。这解释了为什么当一个文件通过所有验证测试(即PNG小于3 MB)时不会抛出发脾气,但是当没有附加任何东西(或任何不符合该条件的东西)时会发生故障。

1 个答案:

答案 0 :(得分:1)

首先,我不明白为什么要在文本框中手动设置值并选择框。通常,Rails会为您执行此操作,但如果没有表单定义,我无法确定您是否真的需要这样做。

即便如此,鉴于这些信息,我认为可以说你需要的是这个:

f.text_field :event_id
...
f.select :event_id, @events

这应该适用于你打算做的事情。我不确定它与提交文件有什么关系,但是对于之前提交的部分你是对的。意想不到的结果源于此:

params[:event_id].to_i

除非您在控制器内手动设置此参数条目,否则如果它是nil,则无法将其转换为整数。如果你使用基本的表单助手调用就会消失。