gpt4 book ai didi

ruby-on-rails - Papaerclip 不适用于更新方法

转载 作者:可可西里 更新时间:2023-11-01 10:44:11 25 4
gpt4 key购买 nike

我有模型:

class Person
include Mongoid::Document
include Mongoid::MultiParameterAttributes
include Mongoid::Paperclip

attr_accessible :photo,:name
has_mongoid_attached_file :photo, :styles => {:thumb => "100x100>" }, default_url: "/images/:style/missing.png"

field :photo
field :name
end

ManagedbController更新操作中,我做了:

def edit
@person=Person.find_by(name: params[:name])
end

def update
@person=Person.find_by(name: params[:name])
@person.update_attributes(photo: params[:photo])
end

edit.html.erb

<h2> Add photo here!</h2>
<%= @person.name %>

<%= form_for @person, url: {controller: :managedb,action: :update}, html: {mulitpart: true} do |f| %>
<p><%= f.hidden_field :name %></p>
<p><%= f.file_field :photo %></p>
<p><%= f.submit :submit , class: "btn btn-large btn-success" %></p>
<% end %>

当我访问编辑页面时,我从 @person.name 获取了人名,这意味着 @person 变量是NOT NIL

但是当我选择一张图片并点击提交时,我在更新方法上遇到了这个错误:

Mongoid::Errors::DocumentNotFound

Document not found for class Person with attributes {:name=>nil}.

 @person=Person.find_by(name: params[:name])  

请求参数

{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"jpm+Ljk6rvZP9bIUw2gA9BvfZXsnATzsIpEEJMTbuzY=", "person"=>{"name"=>"child", "photo"=>#<ActionDispatch::Http::UploadedFile:0x007ffa20a05330 @original_filename="deepika-padukone-61a.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"person[photo]\"; filename=\"deepika-padukone-61a.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/b2/v1ytdy497fj9md28f7pr9wgm0000gn/T/RackMultipart20130911-3884-daf5yu>>}, "commit"=>"submit", "controller"=>"managedb", "action"=>"update"}

Rack session

这里有什么问题?帮助!我正在使用 Mongoid 和 Rails 3.2.13。

最佳答案

您没有在表单中给出此人的姓名,因此 params[:name]nil。您可以添加一个隐藏字段以保留名称(id 更好)并使用参数在您的 Controller 中获取它。

试试这个:

<h2> Add photo here!</h2>
<%= @person.name %>

<%= form_for @person, url: {controller: :managedb,action: :update}, html: {mulitpart: true} do |f| %>
<p><%= f.hidden_field :name %></p>
<p><%= f.file_field :photo %></p>
<p><%= f.submit :submit , class: "btn btn-large btn-success" %></p>
<% end %>

编辑

我建议您在 ManageDbController 中分离您的操作:1 显示表单(应该是 edit),另外 1 更新您的模型(update Action 不要改变)。

您还可以安装这 2 个 gem better_errorsbinding_of_caller,它们可以帮助您调试问题。

关于ruby-on-rails - Papaerclip 不适用于更新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18742000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com