我正在尝试使用远程设置为 true 的 Rails 表单上传文件。我正在使用 Rails 4.1.1。假设我的模型是一个消息,它使用 JavaScript,以便用户可以轻松地发送多条消息而无需重新加载页面。表格设置如下:
<%= form_for @message, url: {action: "create"}, html: {:class => "message-form", multipart: true}, remote: true do |f| %>
用户可以上传带有消息的图像,如果他们愿意的话。MessageImage 在表单中充当嵌套属性,声明如下(http://railscasts.com/episodes/196-nested-model-form-revised方式):
<%= f.fields_for :message_images do |builder| %>
<%= render 'message_image_fields', f: builder %>
<%= link_to_add_fields "Add an image", f, :message_images %>
<% end %>
在我的控制器上,动作大致是这样的:
if @message.save
flash.now[:success] = "Message sent"
else
flash.now[:alert] = "Error sending the message"
end
respond_to do |format|
format.html { render 'new' }
format.js { render 'new' }
end
现在,只要用户不发送任何图像,它就可以完美运行,但如果他们发送了,它会使用 format.html 而不是 format.js。删除 format.html 会给 ActionController::UnknownFormat-exception。
现在,这显然与您无法提交远程设置为 true 的文件有关。我试着搜索了一下,发现了这个宝石https://github.com/JangoSteve/remotipart,这似乎正是我正在寻找的。我按照说明安装了它,但由于某种原因,如果我删除 format.html,它仍然无法工作并给出 ActionController::UnknownFormat-exception。但是,我找不到任何涉及嵌套属性的示例。这个gem是否有任何替代方法或任何其他方法来解决这个问题,或者我应该设置它在用户提交文件时呈现HTML?