Pergunta

É possível atribuir automaticamente um modelo de layout especificado para um controlador em particular e todos os recursos aninhados dentro dele, conforme especificado no routes.rb? Esta disposição deve aplicar-se apenas os pontos de vista de controlador especificado e aqueles aninhados dentro dele; ele não precisa de ser aplicada a cada ponto de vista dentro do aplicativo, como application.html.erb seria (na verdade estou usando o layout especializada com o layout pedido de layout aninhada).

Assim, por exemplo, se eu tivesse

map.resources :news, :shallow => true do |n|
  n.resources :articles do |a|
    a.resources :comments
  end
end

quando visito um url como localhost/news/1/articles/new devo ver meu layout news.html.erb em ação. A partir de agora, eu não.

Eu, obviamente, não querem recriar o mesmo arquivo de layout para cada controlador aninhados dentro do pai (mesmo que eu iria retirar a carne do layout e colocá-lo em uma parcial compartilhado). Estou emocionado ainda menos sobre como especificar o modelo de layout nos controladores específicos si (este exemplo específico é um tipo de coisa temporária, embora eu vou ter um caso de uso 'real' para este um pouco mais abaixo na estrada).

Obrigado!

Foi útil?

Solução

Editar a pergunta original para maior clareza (as respostas não foram bastante responder o problema central), eu percebi que eu preciso fazer é ter o controlador nested classes herdam do pai de nível superior. Não só isso faz resolver a questão central mais fácil, ele corrige algumas outras coisas que foram me incomodando.

(eu diria "a'doy", mas há outros que trabalham com este aplicativo, que obscurecia o que, normalmente, seria um pouco mais óbvio.)

Outras dicas

Para o seu problema news.html.erb, é que um erro de digitação? Você deverá ver seu arquivo new.html.erb que está em suas views / artigos de pasta (layout padrão assumindo) e não um arquivo news.html.erb. Você vai ter que se certificar que seu @news variável de instância está definido e seu form_for será para [@news, @article] em vez de apenas @article.

Além disso, você não tem que criar um layout para cada controlador, você pode criar um application.html.erb em seus layouts de pasta e todos os controladores que não têm um layout nos layouts pasta usarão application.html .erb e você não tem que especificá-lo em seus controladores, basta remover o layout com o mesmo nome que o controlador.

" Eu estou ainda menos entusiasmados sobre como especificar o modelo de layout nos controladores si "

Não há nenhuma razão para se preocupar com isso. Isto é simplesmente o que você faz. É uma linha de código DSL, criado especificamente para esta finalidade. Não desajeitado.

class ArticlesController < ActionController::Base
  layout :news
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top