【问题标题】:form_remote_for using put to different actionform_remote_for 使用 put 进行不同的操作
【发布时间】:2011-07-16 15:54:14
【问题描述】:

我需要向“/users/upload_image”操作发出“放置”请求。

以下代码:

<% form_remote_for @user, :url => "/users/upload_image?id=#{@user.id}", :method => :put, :html => { :multipart => true } do |upload_form| %>
    <%= upload_form.file_field :avatar %>
<% end %>

生成以下 HTML:

<form action="/users/1234567" method="post" onsubmit="$.ajax({data:$.param($(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('HMkaYvfHyyYR1jGpVPkyLPfkPacqvTvtHjgDowzwzuY='), dataType:'script', type:'post', url:'/users/1234567'}); return false;">

当我设置 :method => :put in :html 参数时,它将仅在 HTML 中设置,而不是在 JavaScript 代码中。

  1. 我需要在表单标签和 JavaScript 中添加“放置”
  2. 我需要采取行动,例如“/users/upload_image”

怎么做?

谢谢

【问题讨论】:

    标签: ruby-on-rails forms actionview


    【解决方案1】:

    如果您查看下面的&lt;form&gt; 标签,您会看到:

    <input name="_method" type="hidden" value="put" />
    

    那是因为 HTTP 不支持 PUTDELETE 方法。它只支持GETPOST 所以Rails 就是这样模仿PUT 方法的

    UPD

    关于ajax文件上传:Ruby on Rails AJAX file upload

    要添加/users/:id/upload_image 路径,您应该编辑您的路由和控制器:

    # routes to get /users/:id/upload_image
    map.resources :user, :member => {:upload_image => :put}
    
    # users_controller
    def upload_image
      @user = User.find(params[:id])
      ...
    end
    

    现在您可以使用upload_image_user_path(@user) 为您生成/users/@user.id/upload_image url

    UPD 2

    如果你想得到/users/upload_image?user_id=XXX

    # config/routes.rb
    map.resources :user, :collection => {:upload_image => :put}
    
    # app/controllers/users_controller.rb
    def upload_image
      @user = User.find(params[:user_id])
      ...
    end
    

    【讨论】:

    • 是的。我知道了。谢谢。我如何自定义 :url ?
    • 谢谢。我已经在上传代码了。但是这个请求是在 /users/update 方法中处理的。由于它们是不同的场景,我需要一个单独的操作,称为 /users/upload_image"。我现在唯一需要的是更改 form_remote_for 中的操作。设置不同的 :url 不会产生任何效果。跨度>
    • 新更新。但是,实际上,我并没有完全理解。
    • 我只需要在单独的控制器动作中实现头像上传。谢谢 !我工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多