2016-01-20 4 views
0

У меня есть форма с изображениями для загрузки, но эта форма не построена непосредственно на модели, я использую form_tag вместо form_for.Paperclip with form_tag без соответствующей модели

Я хотел бы загрузить изображения и сохранить их с помощью Paperclip, но как я могу заставить Paperclip понять параметры из моей формы?

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

ответ

1

Чтобы исправить некоторые из вашей терминологии, Paperclip имеет быть присоединены к модели, иначе вы не смогли бы спасти файлы, которые у вас есть.

Проблема заключается в том, что вы пытаетесь заполнить модель, которая не соответствует вашей структуре маршрутизации (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, вам нужно сократить вне параметров модели:

#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'. Можно ли сохранить файл, используя Paperclip, если имя 'file_field_tag' имеет другое имя? – goo

+0

Да, вы просто задали объект paperclip явно: '@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

Смежные вопросы