[Ror-es] Duda de concepto sobre partials

Sebastian Delmont sd at notso.net
Fri Dec 8 17:11:37 GMT 2006


Y la respuesta a la pregunta original seria algo como:

en views/public/show.rhtml

   ...
   <%= render_component :controller => "new", :action =>  
"mod_news_component", :params => {:id => @current.id} %>
   ...

(lo de mod_news_component es simplemente una convencion personal de  
llamar _component a todas las acciones que solo son utilizadas como  
componentes, y lo de :params => {...} es simplemente un ejemplo de  
como pasar parametros al componente)

en new_controller
class NewController
   def mod_news_component
     @news = News.find(params[:id])
     render :template => "news/mod_news_component", :layout => false
   end
end

y el view, pues como lo quieras.

Es importante el render explicito para el componente, para poder  
decirle que no use layout. En caso contrario, incluiria el layout que  
tengas definido para ese controlador, o el general de la aplicacion,  
y como el componente va insertado dentro de otra pagina que ya  
incluye su propio layout, creo que no se veria muy bonito.


Un detalle sobre componentes... los parametros debes pasarlos todos  
en :params. Es posible que puedas pasar :id directamente, pero  
cualquier otro parametro va en :params.

Otro detalle. En :params puedes pasar objetos completos. El tipo de  
cosas que NO puedes hacer en un URL. Asi que en este ejemplo, hubiera  
podido haber dicho algo como :params => {:object => @current}  y en  
el componente @news = params[:object], ahorrandome asi el find.



On Dec 8, 2006, at 11:31 AM, Xavier Noria wrote:

> On Dec 8, 2006, at 4:54 PM, Fernando wrote:
>
>> Hola amigos,
>>
>> De nuevo recurro a vosotrs para que me ayudéis a aclarar mis ideas.
>>
>> Tengo el siguiente problema.
>>
>> Estoy mostrando a través de un controlador "public_controller.rb" ,
>> y por medio del método "show" una serie de páginas en detalle.
>> Hasta ahora todo va cómo la seda.
>> Pero el problema me viene cuando he decidido, "sacar por una
>> ventanita o modulito" en este caso dentro de un div una noticia,
>> del "new_controller.rb" y el método show. Parar ello creo que lo
>> normal sería sacarlo por medio de un partial " _mod_news.rhtml".
>> ¿Pero cómo lo hago sí el controller cargado por URL es "public"?
>> ¿Creo un método "mod_news" que busque esa noticia que quiero sacar
>> (la más reciente por ejemlo) y lo invoco en el partial?
>> O sí no es correcto así, ¿cómo debo plantearlo?
>
> La manera de invocar a una accion de otro controlador e insertar el
> output es render_component. Esta es una funcionalidad que no parece
> tener mucho futuro porque a DHH mismo no le gusta, su uso esta en
> general desconsejado (en la edicion actual del Agile se explica esto
> un poco, DHH tambien hablo de ello en la conferencia).
>
> Las partials necesitan que los datos ya esten ahi cuando se procesa
> el template, si hay partials comunes entre vistas se recomienda
> factorizar en before filters.
>
> -- fxn
>
>
>
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>



More information about the Ror-es mailing list