我认为它是一个mongoid问题,因为编辑现有的照片是有效的。只有新抛出路径错误
resources :products do
resources :photos do
collection do
post 'sort'
end
end
end
resources :companies do
resource :photo
end
before_filter find_or_build_photo
def find_or_build_photo
# these have many photos
if !params[:story_id].blank? or !params[:product_id].blank?
@photo = params[:id] ? @parent.photos.find(params[:id]) : @parent.photos.build(params[:photo])
end
# these have one photo
if !params[:company_id].blank?
@photo = @parent.photo ? @parent.photo : @parent.build_photo(params[:photo])
end
end
我在form_for帮助器的视图中得到了一些“未定义的方法photo_path”等错误。 我的Theorie - >因为只有“照片” - 控制器而没有“照片”控制器。这混淆了路径 - blackmagic!?
Started GET "/companies/4cf6b9c3499dda12e3000003/photo/edit" for 127.0.0.1 at Thu Dec 02 17:51:42 +0100 2010
Processing by PhotosController#edit as HTML
Parameters: {"company_id"=>"4cf6b9c3499dda12e3000003"}
mcu_dev['companies'].find({:_id=>BSON::ObjectId('4cf6b9c3499dda12e3000003')}, {}).limit(-1)
Rendered photos/_form.html.haml (3893.3ms)
Rendered photos/edit.html.haml within layouts/application (3899.1ms)
Completed in 6730ms
ActionView::Template::Error (undefined method `company_photos_path' for #<# <Class:0x103842e30>:0x1038404a0>):
1:
2:
3: = form_for [@parent, @photo], :html => { :multipart => true } do |f|
4: -if @photo.errors.any?
5: #errorExplanation
6: %h2= "#{pluralize(@photo.errors.count, "error")} prohibited this photo from being saved:"
app/views/photos/_form.html.haml:3:in `_app_views_photos__form_html_haml___1111817113_2176907420_506750'
app/views/photos/edit.html.haml:3:in `_app_views_photos_edit_html_haml__1185726823_2176970040_0'
lib/include/flash_session_cookie_middleware.rb:16:in `call'
http://img4.imageshack.us/img4/6892/rubyerror.png
完整来源:github.com/banditj/mongoid-carrierwave-uploadify
答案 0 :(得分:1)
是的,你可以。
您获得undefined method photo_path
的原因是因为您没有使用已定义的嵌套资源。
在你的form_for
中你应该这样做:
<%= form_for [@company, :photo] do |f| %>
@company
是预先存在的公司对象。
答案 1 :(得分:0)
尝试覆盖网址:
<%= form_for [@company, @photo], :url => company_photo_path(@company) do |f| %>
<% end %>
这应该给你一个POST到PhotosController #create的表单。你可能想做一个PUT,因为你的控制器拿起照片(如果它存在),在这种情况下你还需要传递:html => { :method => :put }
,这应该转到PhotosController#update。
答案 2 :(得分:0)
find_or_build_photo
方法变得非常臭。
感觉您不必要地重载Photo模型。拥有许多照片的产品与公司的化身不同。
Plus Mongoid被Photo中的多个embedded_in声明搞糊涂了。
我建议创建第二个名为Avatar的模型,以满足单一资源需求,例如向公司或个人添加照片。将照片用于产品或故事中的多个条目。
这是现实世界的更好模型。它还允许为Avatar和Photo设置不同的大小。通常我扔掉原版,只在“阿凡达”中制作一个或两个小尺寸。对于Photo,我会保留原版并制作四到五种不同尺寸,以便在我的故事中更灵活地呈现。
公司将embeds_one :avatar
。产品将embeds_many :photos
。
这种干净的目的分离应解决路线中单一与多种资源的问题。
对于头像,不需要Uploadify。只需使用标准文件上传表单元素即可。它很简单,可以添加到更大的公司表格中。