Entender a "mágica" do Rails no que diz respeito a renderizar parciais (e passar locais para eles).
Por que isso funciona:
<%= render "rabbits/form" %>
E este trabalho:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
mas isso não funciona:
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Mas isso faz:
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Além disso, como posso pesquisar essas nuances para não precisar incomodar as pessoas no SO?
ruby-on-rails
partial-views
Meltemi
fonte
fonte
Respostas:
A resposta curta é que o método render analisa o primeiro argumento que você passa. Se você passar um hash (que inclui
:partial => 'foo', :locals => {blah blah blah}
), ele passará todos os seus argumentos como um hash e os analisará de acordo.Se você passar uma string como seu primeiro argumento, ele assume que o primeiro argumento é seu nome parcial e passará o restante como seus locais. No entanto, nessa chamada subsequente, ele realmente atribui
:locals => your_locals_argument
, que neste caso é o todo:locals => {locals hash}
, em vez de apenas{locals hash}
; ou seja, você acaba com:locals => {:locals => {locals hash}}
, em vez de:locals => {locals hash}
.Portanto, meu conselho é sempre transmitir explicitamente os valores da mesma maneira o tempo todo, e você não terá problemas. Para aprender sobre isso, fui diretamente para o código em si ( actionpack / lib / base.rb ,
render()
método no Rails 2; Rails 3 é diferente). É um bom exercício.Além disso, não se preocupe em "incomodar" as pessoas no SO. É por isso que este site existe. Eu até aprendi algo com isso.
fonte
se você precisa especificar: locais, você precisa especificar: parcial ou: modelo
Deveria trabalhar
fonte
clone https://github.com/rails/rails.git
? Ou há um modo melhor? Desculpe, mas eu sou relativamente novo no RoR e ainda não encontrei uma maneira boa / fácil / consistente de pesquisar a documentação do Rails ... de forma que EXISTE alguma.http://api.rubyonrails.org/
não é facilmente pesquisável. e a fonte do git também não é ... suspiroPara ser honesto, eu só conheço esses casos de uso, porque tenho me mantido atualizado com o Rails nos últimos dois anos e li os anúncios de que uma nova maneira de fazer isso foi adicionada. Costumo cometer um erro nisso, mas geralmente é facilmente corrigido.
É uma daquelas partes da API Rails que não foi cuidadosamente pensada, se você quer saber. Ele apenas acumulou mais e mais açúcar sintático ao longo dos anos, sem depreciar nenhum dos antigos comportamentos. O método render tem diabetes.
Para piorar ainda mais, a renderização se comporta de maneira diferente no controlador e na visualização. Também examino o conteúdo do primeiro argumento para ver se é um arquivo, modelo, ação ou parcial. Se começar com uma barra, é um arquivo ou algo parecido.
Sou a favor de usar a notação mais curta sempre que possível. Porque as notações curtas comunicam a intenção muito bem. Ao lê-lo, geralmente faz o que você pensa que faz. Escrever parciais não é simples.
fonte
Aqui está a fonte do método de renderização de http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render :
Espero que esta ajuda!
fonte