Possible Duplicate:
Rails: confused about syntax for passing locals to partialsRails 3, pasando variable local a parcial
I quieren pasar variable local (que no tiene campo correspondiente en el modelo) a parcial.
# infos/index.html.erb
<%= render :partial => 'info', :locals => {:info => first, :img_style => "original"} %>
: img_style será estilo html para la imagen.
# infos/_info.html.erb
<% first = @infos.shift %>
<%= image_tag(info.image.url, :class => img_style), info %>
# and here goes code for normal iteration
<% @infos.each do |e| %>
# etc
Pero esto no funciona, se devuelve el error:
# GET /infos/
undefined local variable or method `img_style' for #<#<Class:0xc471f34>:0xc470cc4>
Se puede hacer sin hacer parciales redundantes?
Lo siento por mi inglés. : P
EDIT:
Bueno Info modelo no tienen: Campo de img_style
# db/schema.rb
create_table "infos", :force => true do |t|
t.string "title"
t.text "description"
t.integer "place_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.text "short"
end
Edit2:
Incluso sencilla
<%= img_style %>
Don' t trabajos.
Aplicación Seguimiento de la pila
app/views/infos/_info.html.erb:3:in `_app_views_infos__info_html_erb___1029249744_92158380_1472718'
app/views/infos/index.html.erb:7:in `_app_views_infos_index_html_erb__184644561_92172050_0'
app/controllers/infos_controller.rb:8:in `index'
Edit3:
Vistas
# infos/index.html.erb
<div >
<h1><%= t('info.infos') %></h1>
<div id="left">
<% first = @infos.shift %>
<div>
<% @aimg_style = "original"%>
<%= render 'info', :locals => {@img_style => @aimg_style } %>
</div>
<ul>
<% @infos.each do |e| %>
<li>
<div>
<%= render :partial => 'info', :object => e %>
</div>
</li>
<% end %>
</ul>
<%= will_paginate @infos %>
# infos/_info.html.erb
<%#= link_to thumbnail(info, "listTabsImg", false, img_style), info %>
<%#= image_tag(info.image.url()) %>
<%= img_style %>
<p>
<strong class="nameBox"><%= link_to info.title, info %></strong>
<span><%= info.short %>...</span>
<%= link_to "#{t('more')} »", info %>
</p>
FINALMENTE
esto no funciona:
# infos/index.html.erb
<% first = @infos.shift %>
<div class="boxEvent">
<% @aimg_style = "original"%>
<%= first %>
<%= render 'info', :locals => {:info => first, :img_style => @aimg_style } %>
</div>
esto funciona:
# infos/index.html.erb
<% @infos.each do |e| %>
<li>
<div class="boxEvent">
<%= render :partial => 'info', :locals => {:info => e, :img_style => "original"} %>
</div>
</li>
<% end %>
Alguien sabe por qué?
¿Qué línea de código está en qué archivo? ¿Está el '<% = image_tag' colocado en el' _info' parcial, o en otro lugar? ¿El error aumenta cuando el primer ejemplo invoca el parcial o lo llamas desde otro lugar? Lo pregunto porque mencionó los parciales redundantes, pero no ha dicho que llame al parcial desde más de un lugar. – Arsen7
Esto puede no ser nada, ya que su pregunta ya incluye el código correcto, pero usar la sintaxis abreviada causará este error: 'render 'info',: locals => {...}'. Si está llamando explícitamente al parcial, 'render: partial => 'info',: locals => {...}', entonces no veo ningún motivo por el que esto no funcione. Como sugirió @ Arsen7, sería útil saber cómo anidan sus parciales en su plantilla. – neezer
@ Arsen7 El error se produce cuando yo/infos del navegador. Quería hacer eso sin parciales redundantes (cada uno parcial para cada estilo, por ejemplo: _info_small.html.erb, _info_original.html.erb, etc.) –