form_tag回形针无对应型号

Paperclip with form_tag without corresponding model

我有一个要上传图片的表格,但这个表格不是直接建立在模型上的,我使用的是 form_tag 而不是 form_for

我想上传图片并用 Paperclip 保存它们,但是如何让 Paperclip 理解我表单中的参数?

@user.avatar.picture = params[:my_file_field]

你能详细描述一下 issue.what 我知道你对 form_tag

有疑问

如果您使用的是 form_tag,那么您应该使用正确的 form_tag 格式。

form_tag(controller: "people", action: "search", method: "get", class: "nifty_form")

例如你必须这样做

<%= form_tag :controller => 'images', :action => 'create', :method => "get", :multipart => true do %>

为了更正您的一些术语,Paperclip 必须 附加到模型,否则您将无法保存您拥有的文件。

你遇到的问题是你试图填充一个与你的路由结构不对应的模型(即你正在传递图片属性并且需要一个用回形针解析它的方法)。

您仍然有一个 controller/action 模型要填充...


#config/routes.rb
resources :users, path: "profile", only: [:index] do 
   patch :avatar, on: :member #-> url.com/profile/:id/avatar
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def avatar
       @user = User.find params[:id]
       @user.update avatar_params
   end

   private

   def avatar_params
       params.require(:user).permit(avatar_attributes: [:picture])
   end
end

#app/views/users/show.html.erb
<%= form_for @user, url: user_avatar_path(@user) do %>
   <%= f.fields_for :avatar do |a| %>
      <%= a.file_field :picture %>
   <% end %>
   <%= submit_tag %>
<% end %>

--

如果您想坚持 form_tag,您需要删除 model-level 参数:

#config/routes.rb
resources :users, path: "profile", only: [:index] do
   patch :avatar, on: :member
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def avatar
      @user = User.find params[:id]
      @user.avatar.update avatar_params
   end

   private

   def avatar_params
      params.permit(:picture)
   end
end

#app/views/users/show.html.erb
<%= form_tag users_avatar_path(@user) do %>
   <%= file_field_tag :picture %>
   <%= submit_tag %>
<% end %>

几个要点:

  1. form_tag 不会显示错误
  2. 您的 file_field 需要与您的 paperclip 附件同名