Rails 3.1 has_one вложенный ресурс: маршрутизация не генерирует все пути

У меня есть отношение has_one:

# supplier.rb

  has_one :presentation
...

# presentation.rb

  belongs_to :supplier
...

и следующие вложенные маршруты для них:

# routes.rb

resources :suppliers do
  resource :presentation
end

работает rake routesдает:

    supplier_presentation POST ... {:action=>"create", :controller=>"presentations"}
 new_supplier_presentation GET ... {:action=>"new", :controller=>"presentations"}
edit_supplier_presentation GET ... {:action=>"edit", :controller=>"presentations"}
                           GET ... {:action=>"show", :controller=>"presentations"}
                           PUT ... {:action=>"update", :controller=>"presentations"}
                        DELETE ... {:action=>"destroy", :controller=>"presentations"}

Почему нет name_helper для действия show?

Я могу переопределить проблему, выполнив что-то вроде:

resources :suppliers do
  resource :presentation, :except => :show do
    get "" => "presentations#show", as: "presentation"
  end
end

даю маршрут:

presentation_supplier_presentation GET ... {:controller=>"presentations", :action=>"show"}

но мы все теперь это не правильный способ справиться с этим ..

Есть предложения?

--

(отредактировано)

supplier_presentation_path(@supplier)

работает, но почему?... Он не появляется, когда rake routes выполняется в моей оболочке...


person fgdemussy    schedule 11.08.2011    source источник


Ответы (2)


Я действительно не знаю, почему это не отображается, когда вы делаете rake routes, но вы пытались в своем коде сделать supplier_presentation_path(@supplier)? Он должен работать на основе ваших маршрутов.

person Robin    schedule 11.08.2011
comment
Это работает, но почему это не отражается при выполнении rake routes - person fgdemussy; 11.08.2011
comment
Я не знаю, может быть, потому что это то же самое, что и POST. Я попробовал это на одном из своих проектов, и он тоже не отображается. - person Robin; 11.08.2011

Тем не менее, это должно работать для вас. Попробуй это:

link_to "Presentation", [@suplier, @presentation]

or

link_to "Presentation", suplier_presentation_path(@suplier, @presentation)
person fl00r    schedule 11.08.2011
comment
Вам не нужен @презентация при использовании supplier_presentation_path, так как у поставщика есть_одна презентация;) - person Robin; 11.08.2011
comment
@ Робин, о, это правда. Я не заметил этой связи - person fl00r; 11.08.2011