Mongoid embeds_one form_for ошибка пути для новых объектов - PullRequest
0 голосов
/ 02 декабря 2010

Может ли один и тот же класс модели быть ресурсом коллекции в одном и единственным ресурсом в другом?


ОБНОВЛЕНИЕ !!!

Я думаю, что это проблема монгоидов, так как редактирование существующих фотографий работает. Только новые выкинуть ошибки пути


ORM - монгоидная бета 20


routes.db

  resources :products do
     resources :photos do
        collection do
           post 'sort'
         end
     end
   end

   resources :companies do
      resource :photo
   end

photos_controller.rb

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

Я получаю ошибки "undefined method photo_path" и т. Д. В представлении с помощником form_for. Моя Теория -> потому что есть только «фото» -контроллер и нет «фото» -контроллера. это путает путь-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

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Да, вы можете.

Причина, по которой вы получаете undefined method photo_path, заключается в том, что вы не используете определенный вами вложенный ресурс.

В вашем form_for вы должны делать это:

<%= form_for [@company, :photo] do |f| %>

Где @company - это ранее существовавший объект компании.

0 голосов
/ 03 декабря 2010

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ощущается, вы перегружаете модель "Photo".Продукт, имеющий много фотографий, отличается от аватара для Компании.

Плюс Mongoid запутывается из-за многочисленных объявлений встраиваемых_файлов, найденных на Фото.

Я бы порекомендовал создать вторую модель под названием Avatar для единственного числа.потребности в ресурсах, таких как добавление фотографии в компанию или лицо.Используйте Photo для нескольких записей в Product или Story.

Это лучшая модель реального мира.Это также позволяет устанавливать разные размеры для Аватара против Фото.Обычно я выбрасываю оригинал и делаю только один или два небольших размера в аватаре.Для фото я сохраняю оригинал и делаю четыре или пять разных размеров для более гибкого представления моих рассказов.

Тогда компания embeds_one :avatar.Где продукт будет embeds_many :photos.

Это чистое разделение целей должно решить проблему с единичными и множественными ресурсами в маршрутах.

Для Аватара Uploadify не требуется.Просто используйте стандартный элемент формы загрузки файла.Это просто и может быть добавлено в большую форму компании.

0 голосов
/ 03 декабря 2010

Попробуйте переопределить URL:

<%= form_for [@company, @photo], :url => company_photo_path(@company) do |f| %>
<% end %>

Это должно дать вам форму, которую POST отправляет в PhotosController # create. Вы, вероятно, хотите сделать PUT, так как ваш контроллер забирает фотографию, если она существует, и в этом случае вам также необходимо передать :html => { :method => :put }, что должно перейти к обновлению PhotosController #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...