Ruby on rails 当更新包含图像但不包含图像的_formpartial时,我会得到一个错误
我正在使用Carrierwave&Fog将图像str8推送到S3 创作动作效果很好。问题是,每当我去更新记录时,比如说更改Ruby on rails 当更新包含图像但不包含图像的_formpartial时,我会得到一个错误,ruby-on-rails,ruby-on-rails-3,carrierwave,fog,Ruby On Rails,Ruby On Rails 3,Carrierwave,Fog,我正在使用Carrierwave&Fog将图像str8推送到S3 创作动作效果很好。问题是,每当我去更新记录时,比如说更改name属性,而我对图像字段不做任何操作时,就会出现如下错误: Started PUT "/vendors/7" for 67.230.41.62 at 2012-12-09 07:00:51 +0000 2012-12-09T07:00:51+00:00 app[web.1]: app/controllers/vendors_controller.rb:65:in `u
name
属性,而我对图像字段不做任何操作时,就会出现如下错误:
Started PUT "/vendors/7" for 67.230.41.62 at 2012-12-09 07:00:51 +0000
2012-12-09T07:00:51+00:00 app[web.1]: app/controllers/vendors_controller.rb:65:in `update'
2012-12-09T07:00:51+00:00 app[web.1]: NoMethodError (undefined method `thumb_image_changed?' for #<Vendor:0x00000005940750>):
2012-12-09T07:00:51+00:00 app[web.1]:
2012-12-09T07:00:51+00:00 app[web.1]: app/controllers/vendors_controller.rb:66:in `block in update'
结束
有问题的行是update\u属性
这是我的views/vendors/_-form.html.erb
<%= simple_form_for(@vendor) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<div class="span8">
<%= f.input :name, :label => "Vendor Name", :wrapper_html => { :class => "span6" } %>
</div>
<div class="span8">
<%= f.input :intro_text, :label => "The headline for your storefront", :as => :text, :wrapper_html => { :class => "span6" }, :input_html => { :rows => 1 } %>
</div>
<div class="span8">
<%= f.input :description, :label => "The description of your store", :as => :text, :wrapper_html => { :class => "span6" }, :input_html => { :rows => 5 } %>
</div>
<div class="span8">
<%= f.input :banner_image, :label => "Upload Banner", :wrapper_html => { :class => "span6" } %>
</div>
<div class="span8">
<%= f.input :logo_image, :label => "Upload Logo", :wrapper_html => { :class => "span6" } %>
</div>
<div class="span8">
<%= f.button :submit, :class => "btn", :wrapper_html => { :class => "span6" } %>
</div>
</div> <!-- /.form-inputs -->
<% end %>
我该如何解决这个问题
编辑1
供应商
型号:
class Vendor < ActiveRecord::Base
attr_accessible :name, :description, :banner_image, :logo_image, :intro_text, :thumb_image
mount_uploader :banner_image, ImageUploader
mount_uploader :logo_image, ImageUploader
mount_uploader :thumb_image, ImageUploader
acts_as_tagger
has_many :products
def tags
self.owned_tags
end
def taggings
self.owned_taggings
end
end
原来我必须删除我的
供应商
模型上的调用mount\u uploader:thumb\u image
,因为我在该模型上没有名为thumb\u image
的列。我猜错误来自该模型。你能把它寄出去吗?@m_x完成了。看更新的问题。这很奇怪,我必须承认我不知道它来自哪里。我想你应该检查一下carrierwave的源代码-thumb\u image\u changed?
是一种神奇的方法,通常由创建,我不知道为什么在这种情况下它不会自动创建。愚蠢的问题:你的迁移都是最新的吗?@m_x是的。问题是,在我的所有表中都没有thumb\u image
列。这是我在上面展示的image\u uploader.rb
文件中指定的carrierwave设置。我已经更新了问题,将我的供应商
文件的模式包括在内。也许你需要这个专栏,其他两张图片都有自己的。事实上,我认为这就是问题所在:对于另外两个ActiveRecord自动创建属性访问器(并处理脏状态),对于这一个,您没有访问器,甚至没有虚拟属性访问器。如果我记得清楚的话,carrierwave将自己装载到现有的访问器上。。。
version :thumb, :from_version => :main_banner do
process :resize_to_limit => [170, 120]
end
class Vendor < ActiveRecord::Base
attr_accessible :name, :description, :banner_image, :logo_image, :intro_text, :thumb_image
mount_uploader :banner_image, ImageUploader
mount_uploader :logo_image, ImageUploader
mount_uploader :thumb_image, ImageUploader
acts_as_tagger
has_many :products
def tags
self.owned_tags
end
def taggings
self.owned_taggings
end
end
create_table "vendors", :force => true do |t|
t.string "name"
t.text "description", :limit => 255
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "banner_image"
t.string "logo_image"
t.string "intro_text"
end