【问题标题】:Rails 3 Remote Form Not Passing ParametersRails 3远程表单不传递参数
【发布时间】:2011-06-05 10:41:32
【问题描述】:

我在 Rails 3.0.3 中有一个使用新的 :remote=>true 功能的表单:

<%= form_for :photo, :remote=>true, :html=>{:id=>"photo_form", :multipart => true},     :url=>{:action=>"photo"} do |p| %>
<div id="photo_container">
    <div class="photo">
    <% if @card.photo.exists? %>
    <%= image_tag @card.photo.url(:full), :id=>"card_photo" %>  
    <% end %>
    </div>
    <label class="cabinet"> 
        <%= p.file_field :photo, :class=>"file" %>
    </label>
</div>
<% end %>

提交时,照片字段不会传递给控制器​​操作。但是,如果我删除 :remote=>true 位,则参数会很好地传递。

这个问题,Rails Remote Form does not post form parameters,似乎找到了同样的问题,但是这里的答案不匹配:我的 HTML 显然是有效且格式正确的。

这里有人有什么建议吗?我被难住了。

【问题讨论】:

  • 确保包含 javascript 库

标签: javascript ruby-on-rails forms ruby-on-rails-3


【解决方案1】:

据我所知,您无法远程发送多部分数据。这是因为浏览器安全模型不允许访问&lt;file&gt; 内容,这需要通过远程机制所采用的XMLHttpRequest 流式传输。

远程表单通常等同于没有多部分支持的相同表单。

如果您需要进行异步文件上传,您需要使用&lt;iframe&gt; 并将表单提交到该目标以防止主页被刷新。如果需要,有一些库允许框架页面在完成时更新主框架。

【讨论】:

  • 我还要补充一点,XMLHttpReq (AJAX) 的大小是有限制的。我认为您不能通过 AJAX 发布一个非常大的文件...
  • 我应该补充一点,我实际上在该站点的早期迭代中已经有这个工作。从那以后我没有接触过这个功能,但我知道它在某个时候起作用,所以这一定是可能的?
  • Facepalm 原来我使用的是 remoteipart 插件 (github.com/formasfunction/remotipart) 并且配置错误。所以 tadman,你是绝对正确的,但是有比 iframe 更好的方法来绕过它!谢谢大家。
  • 看起来该插件执行某种同步 POST,但至少可以让您使用相同的 jQuery 挂钩。很有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多