with render_to_string rails how from ruby-on-rails ruby partial-views

ruby-on-rails - render_to_string - render json rails



Ruby on Rails: muestra condicionalmente un parcial (3)

No estoy seguro si estoy haciendo el mejor enfoque aquí, pero tengo un bloque de datos que quiero mostrar después de hacer una búsqueda y no estar allí en absoluto. En primer lugar, no hay nada que mostrar, y en segundo lugar, el modelo al que hace referencia es nulo, por lo que arroja una excepción.

Coloqué este bloque en una plantilla parcial y lo agregué al lugar apropiado en mi diseño. ¿Hay alguna forma de procesar de forma limpia el parcial de forma condicional? ¿Hay una mejor manera de abordar este problema?


Asumiendo que te estoy siguiendo bien, haces esto en el nivel de vista.

<% if !@my_search_data.nil? %> <% render :partial => ''foo/bar'' %> <% end %>

Espero que ayude. Si no, tal vez publique un ejemplo de su código.


Ruby te permite hacer cosas agradables como esta:

<%= render :partial => "foo/bar" if @conditions %>

Para hacer esto un poco más fácil de leer y entender, se puede escribir como:

<%= render(:partial => "foo/bar") if @conditions %>

render es una función, y le pasas un hash que le dice qué parcial representar. Ruby le permite poner las cosas en una línea (lo que a menudo las hace más legibles y concisas, especialmente en las vistas), por lo que la sección if @conditions es solo una declaración if normal. También se puede hacer como:

<% if @conditions %> <%= render :partial => "foo/bar" %> <% end %>

Editar:

Ruby también le permite usar la palabra clave unless en lugar de if . Esto hace que el código sea aún más legible y evita que tenga que hacer comparaciones negativas.

<%= render :partial => "foo/bar" if !@conditions %> #becomes <%= render :partial => "foo/bar" unless @conditions %>


Una manera fácil es usar un método de ayuda. Los ayudantes tienden a ser un poco más limpios que poner la lógica directamente en la vista.

Entonces, su vista podría ser algo así como:

<%= render_stuff_conditionally %>

y tu ayudante tendría un método para controlar esto:

def render_stuff_conditionally if @contional_check render :partial => ''stuff'' end end

donde obviamente las cosas se nombran más apropiadamente