我有一張圖片上傳,但這種形式不是直接建立在模型上,我使用form_tag
而不是form_for
。帶有form_tag的回形針沒有相應的模型
我想上傳圖片並用回形針保存,但是我怎樣才能讓Paperclip從我的表格中瞭解參數?
@user.avatar.picture = params[:my_file_field]
我有一張圖片上傳,但這種形式不是直接建立在模型上,我使用form_tag
而不是form_for
。帶有form_tag的回形針沒有相應的模型
我想上傳圖片並用回形針保存,但是我怎樣才能讓Paperclip從我的表格中瞭解參數?
@user.avatar.picture = params[:my_file_field]
要糾正你的一些術語,回形針有附加到一個模型中,否則你無法拯救你有文件。
您遇到的問題是您試圖填充與您的路由結構不相對應的模型(IE只傳遞圖片屬性並需要使用Paperclip解析它)。
你仍然有一個控制器/動作&模型來填充......
#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
,你需要削減out模型級params:
#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 %>
幾個指針:
form_tag
不會出現錯誤file_field
需要被命名爲與您的paperclip
附件你能更描述關於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 %>
實際上,'form_tag'工作。我的問題是,如果'file_field_tag'沒有直接與模型相關聯,我如何強制Paperclip理解它並保存文件。 – goo
感謝您的回覆。我的附件與模型相關聯,並且正在工作。我的問題具體關於'file_field_tag'。如果'file_field_tag'具有不同的名稱,是否可以使用Paperclip保存文件? – goo
是的,你只需要明確地設置回形針對象:'@object = Object.new''@object.attachment = params [:your_file_field]''@ object.save' –