2016-01-20 68 views
0

我有一張圖片上傳,但這種形式不是直接建立在模型上,我使用form_tag而不是form_for帶有form_tag的回形針沒有相應的模型

我想上傳圖片並用回形針保存,但是我怎樣才能讓Paperclip從我的表格中瞭解參數?

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

回答

1

要糾正你的一些術語,回形針附加到一個模型中,否則你無法拯救你有文件。

您遇到的問題是您試圖填充與您的路由結構不相對應的模型(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 %> 

幾個指針:

  1. form_tag不會出現錯誤
  2. file_field需要被命名爲與您的paperclip附件
+0

感謝您的回覆。我的附件與模型相關聯,並且正在工作。我的問題具體關於'file_field_tag'。如果'file_field_tag'具有不同的名稱,是否可以使用Paperclip保存文件? – goo

+0

是的,你只需要明確地設置回形針對象:'@object = Object.new''@object.attachment = params [:your_file_field]''@ object.save' –

1

你能更描述關於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 %> 
+0

實際上,'form_tag'工作。我的問題是,如果'file_field_tag'沒有直接與模型相關聯,我如何強制Paperclip理解它並保存文件。 – goo