【问题标题】:remote form_tag rails3远程form_tag rails3
【发布时间】:2011-06-08 17:37:13
【问题描述】:

我有以下远程 form_tag,其目标是从另一个屏幕发布以下参数:提升 id 和 bgUploaderFields 到 csv_upload 控制器的创建操作,模仿 csv_uploads/new 操作的行为。

= form_tag csv_uploads_path(:method=> :post), :remote => true, :disable_with => 'Adding multiple...' do
  = text_field_tag "bgUploaderFieldName", "", :id => "bgUploaderField", :readonly => "true"
  = hidden_field :promotion_id, :value => @promotion.id unless @promotion.nil?
  = submit_tag 'Add multiple'

发布后,我提交的是空值:

INSERT INTO `csv_uploads` (`promotion_id`, `created_at`, `updated_at`, `bgUploaderField`) VALUES (NULL, '2011-06-08 17:32:15', '2011-06-08 17:32:15', NULL)

这是我的 rake 路线:

$ rake routes
(in /Users/boris/projects/test)
           csv_uploads GET    /csv_uploads(.:format)                                     {:action=>"index", :controller=>"csv_uploads"}
                       POST   /csv_uploads(.:format)                                     {:action=>"create", :controller=>"csv_uploads"}

csv_uploads_controller.rb

def create
    @csv_upload = CsvUpload.new(params[:csv_upload])

    respond_to do |format|
      if @csv_upload.save
        format.html { redirect_to(@csv_upload, :notice => 'Csv upload was successfully created.') }
        format.xml  { render :xml => @csv_upload, :status => :created, :location => @csv_upload }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @csv_upload.errors, :status => :unprocessable_entity }
      end
    end
  end

  def new
    @csv_upload = CsvUpload.new
    @promotion = Promotion.find_by_sms_promo_id(params[:promo_id])

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

我做错了什么?我还应该提到,parmas 值实际上是在屏幕上填充的。

Started POST "/csv_uploads?method=post" for 127.0.0.1 at 2011-06-08 10:56:42 -0700
  Processing by CsvUploadsController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"1zJCwY0sXb4TaTpO2d+MLox2CHk1sBpho/JR4oH18sw=", "bgUploaderFieldName"=>"http://upload.contextoptional.com/chag/assets/20110608172149.csv", "promotion_id"=>"{:value=>2}", "commit"=>"Add multiple", "method"=>"post"}
FbConfig:

  SQL (0.1ms)  BEGIN
  SQL (0.8ms)  describe `csv_uploads`
  AREL (0.2ms)  INSERT INTO `csv_uploads` (`promotion_id`, `created_at`, `updated_at`, `bgUploaderField`) VALUES (NULL, '2011-06-08 17:56:42', '2011-06-08 17:56:42', NULL)
  SQL (0.2ms)  COMMIT
  CsvUpload Load (0.2ms)  SELECT `csv_uploads`.* FROM `csv_uploads` ORDER BY csv_uploads.id DESC LIMIT 1

【问题讨论】:

  • 你的新动作是什么?您是否将促销设置为 nil 以外的其他内容?您是否在表单中获得了合理的 html? (专门针对 text_field_tag)
  • 嗨。新动作没什么特别的。往上看。提升设置为 2 或 1。非常简单的整数。 text_field_tag 发布一个简单的字符串。

标签: ruby-on-rails forms


【解决方案1】:

看看你的参数:

参数:{"utf8"=>"✓", "authenticity_token"=>"1zJCwY0sXb4TaTpO2d+MLox2CHk1sBpho/JR4oH18sw=", "bgUploaderFieldName"=>"http://upload.contextoptional.com/chag/assets/20110608172149.csv" , "promotion_id"=>"{:value=>2}", "commit"=>"添加多个", "method"=>"post"}

您没有名为 :csv_upload 的键,但这是您用来在 #create 操作中设置属性的键

您应该使用 form_for:

<%= form_for @csv_upload, :remote => true do |f| %>

  <%= f.text_field :bgUploaderFieldName %>

  ...

<% end %>

或者...至少,您应该为标签指定正确的名称:

= form_tag csv_uploads_path(:method=> :post), :remote => true, :disable_with => 'Adding multiple...' do
  = text_field :csv_upload, "bgUploaderFieldName", "", :id => "bgUploaderField", :readonly => "true"
  = hidden_field :csv_upload, :promotion_id, :value => @promotion.id unless @promotion.nil?
  = submit_tag 'Add multiple'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多