Различные представления при вложении ресурсов в Rails - PullRequest
2 голосов
/ 22 марта 2012

Я использую Rails 3.2.1.

Можно ли использовать разные представления при использовании вложенных ресурсов?т.е. профиль / комментарии пост / комментарии.Допустим, вы хотите, чтобы обе страницы выглядели совершенно по-разному.Есть ли способ сделать это без переопределения рендера в каждом действии контроллера?

Желательно, чтобы я все еще хотел использовать ответить_св.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Я ничего не нашел, и в итоге я сделал это следующим образом:

class NestedController < ApplicationController

  before_filter :retrieve_parent
  before_filter :retrieve_scope

  layout :retrieve_layout

  def retrieve_scope
    @scope = @parent.nil? ? controller_name : @parent.class.name.pluralize.downcase || ''
  end

  def retrieve_view
    controller_name + '/' + @scope + '/' + action_name
  end

  def retrieve_parent
    params.each do |name, value|
      if name =~ /(.+)_id$/
        @parent = $1.classify.constantize.find(value)
      end
    end
  end

  def retrieve_layout
   template_exists?(@scope, 'layouts') ? @scope : 'application'
  end

end

Каждый контроллер, который использует вложенные ресурсы, будет выходить из NestedController.

Обратите внимание, что функция retrieve_parent была получена из Railscast Райана о полиморфных ассоциациях.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 12 февраля 2015

У меня была та же проблема, и я сначала разделил контроллеры, как в:

https://stackoverflow.com/a/14947230/1641163

, а затем я предоставил отдельное представление для каждого вложенного контроллера.Когда вы запускаете rails generate controller Profile_Comments new create index, вы получаете соответствующие представления и помощники в нужных каталогах (или, конечно, вы можете просто создать их и поместить их туда вручную), и это те представления, которые будут отображаться по умолчанию.

...