Чтобы исправить некоторые из вашей терминологии, 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 %>
Несколько указателей:
form_tag
не будет показывать ошибки
- Ваши
file_field
потребности быть названы так же, как ваш paperclip
привязанности
Спасибо за ваш ответ. Мои вложения связаны с моделью, и они работают. Мой вопрос конкретно о 'file_field_tag'. Можно ли сохранить файл, используя Paperclip, если имя 'file_field_tag' имеет другое имя? – goo
Да, вы просто задали объект paperclip явно: '@object = Object.new' '@object.attachment = params [: your_file_field]' '@ object.save' –