Pregunta

Hola, quiero presentar esto diciendo que soy nuevo en la codificación.

Tengo un problema que creo que se puede resolver de dos maneras

A. Al hacer un parcial

B. actualizando el controlador

(Puedo estar totalmente equivocado, pero esto es lo que sospecho jajaja)

Tengo dos controladores/vistas "revisiones" y "registros". Y quiero que ambos aparezcan en la misma página.

¿Cómo puedo hacer esto? Intenté hacer un parcial pero siempre recibo un error.

Y probé el código a continuación:

que hicieron que mis reseñas aparecieran en la página, pero cuando agrego

@log = @user.logs.all 

Para él, no tira de todos los registros a la página como lo hace para las revisiones.

def show
  @user = User.find_by_name(params[:id])
  if @user 
    @reviews = @user.reviews.all
    render action: :show
  else
    render file: 'public/404', status: 404, formats: [html]
  end
end
¿Fue útil?

Solución

Lo primero es lo primero. Las vistas se refieren a acciones en controladores. Por lo tanto, puede haber varias vistas para cada controlador o incluso ninguna.

Entonces, si quieres renderizar @reviews y @logs En la misma página, primero debe instanciar ambas variables de instancia en la misma acción y luego representar ambos parciales en la misma acción. ¿Cómo haces eso? Fácil. Primero llegaste al controlador que acabas de mostrar y edita eso show acción.

def show       
  # You can set the variable in the if-clause 
  # And you also need to use static finders with a hash as an argument in Rails4
  if (@user = User.find_by(name: params[:id]))
     @reviews = @user.reviews.all 
     @logs = @user.logs.all
  # You don't need to call render explicitly 
  # if you render the view with the same name as the action 
   else
     render file: 'public/404', status: 404, formats: [html]
   end     
end

Segundo: vas a tu /app/views/reviews/show.html.erb plantilla y coloque ambos parciales allí de esta manera (esto es solo un ejemplo, ajuste su marcado para que se ajuste a sus necesidades).

<h1> Reviews and Logs</h1>
<div id="reviews_part">
 <%= render @reviews %>
</div>
<div id="logs_part">
  <%= render @logs %>
</div>

Ahora crea 2 nuevos parciales /app/views/reviews/_review.html.erb y /app/views/logs/_log.html.erb y coloque todo el marcado necesario allí (use variables regulares review y log para admitir los objetos repetidos). Los rieles repetirán automáticamente esos parciales tantas veces como sea necesario.

O puede llamar explícitamente el render parcial

<div id="reviews_part">
  <% @reviews.each do |review| %>
   <%= render review %> 
        which is the same as
   <%= render partial:"reviews/review", locals:{review:review} %>
  <% end %>
</div>

Otros consejos

Aquí está la forma de convertir parciales en las opiniones en Haml:

=render :partial => "header"
%h2 Hello World
=render :partial => "footer"

Cada parcial que representa de esta manera, debe crearse dentro de la misma carpeta. El nombre de cada parcial tiene que comenzar con un bajo (_). Este debería ser el directorio de la vista:

- home
    - index.html.haml
    - _header.html.haml
    - _footer.html.haml
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top