2011-06-25 71 views
1

导轨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

首先,我不明白你为什么手动设置文本框和选择框的值。通常,Rails会为你做这件事,但是如果没有表单定义,我不知道你是否真的需要这样做。

即使这样,所提供的信息,我认为这是肯定地说,你需要的是这样的:

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

这应该为你打算做什么工作。我不确定它与提交文件有什么关系,但是对于之前提交的部分是对的。意外的零源于此:

params[:event_id].to_i 

除非你是你的控制器中手动设置此参数项,您将无法将其转换为整数,如果它是零。如果你使用基本形式的助手调用,这将消失。

+0

当我进一步研究它时,它与文件的附件没有任何直接关系 - 这只是决定创建新海报是成功的决定因素......还是返回到“新”页面进行更正,导致错误。 新的'f.select'会不会自动选择ID作为URL参数传递的事件? – Benjin

+0

这没有奏效。通过将Rails代码分成多行,我确定意外的nil与'f.select'旁边的':event_id'有关。 – Benjin

+0

您没有提到event_id是作为URL参数传递的,但是在这种情况下,f.select的确会自动选择事件ID。 – Jaryl