2012-03-22 1 views
2

Я использую Rails 3.2.1.Различные представления при вложенности ресурсов в Rails

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

Желательно, я все еще хочу использовать response_with.

ответ

2

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

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

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

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

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