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 %>
几个要点:
form_tag
不会显示错误
- 您的
file_field
需要与您的 paperclip
附件同名
我有一个要上传图片的表格,但这个表格不是直接建立在模型上的,我使用的是 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 %>
几个要点:
form_tag
不会显示错误- 您的
file_field
需要与您的paperclip
附件同名