【发布时间】:2012-01-29 00:40:20
【问题描述】:
我正在尝试创建一个上传表单,允许用户选择一个空白值,这将导致另一个上传过程。 (我用“class”代替了我的实际班级名称)。
我的上传表单是
<%= form_for @upload, :url => class_uploads_path(@uploader), :method =>
:post, :html =>{ :multipart => true } do |f| %>
<%= render "shared/error_messages", :target => @upload %>
<p>This media relates to...<br/>
<%= select "upload", "class_id", Class.all.collect {|class| [class.name,class.id] }, {
:include_blank => true } %></p>
<p>Title:<br/>
<%= f.text_field :title %></p>
<p>Description:<br/>
<%= f.text_area :description, :rows => 3 %></p>
<p>File to upload:<br/>
<%= f.file_field :data %></p>
<p><%= f.submit 'Upload for review' %></p>
<% end %>
这是我的创建方法,如果用户将选择表单留空,我希望运行第一个上传操作,如果他们选择了一个类,我希望运行第二个上传操作。
def create
upload_params = params[:upload] || params[:image] || params[:video]
@class = Class.find(upload_params[:class_id]) || nil
begin
if upload_params[:data]
file_name = upload_params[:data].original_filename
file_contents = upload_params[:data].read
end
rescue
@upload = Upload.new
flash[:error] = "Could not find upload file data. Please reselect file."
render :action => 'new' and return
end
begin
if @class.nil?
@upload = Upload.factory({ :file => file_contents,
:name => file_name,
:network => @uploader,
:title => upload_params[:title],
:description => upload_params[:description] })
else
@upload = Upload.factory({ :file => file_contents,
:name => file_name,
:class => @class,
:network => @uploader,
:title => upload_params[:title],
:description => upload_params[:description] })
end
@upload.save!
我尝试了许多不同的技巧,我试图避免向数据库添加新列。提前致谢。
【问题讨论】:
-
如何让用户将选择框留空,然后运行不同的上传方法?在上面的创建操作中,我尝试了 if .. else 条件。如果用户没有从选择框中选择选项,我希望第一个运行。
标签: ruby-on-rails ruby ruby-on-rails-3