Rails 3, передача локальной переменной в частичную [дубликат]

Возможный дубликат:
Rails: запутались в синтаксисе для передачи локальных переменных в частичные

Я хочу передать локальную переменную (у которой нет соответствующего поля в model) на частичное.

# infos/index.html.erb

<%= render :partial => 'info', :locals => {:info => first, :img_style => "original"} %> 

: img_style будет стилем html для изображения.

# 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

Но это не работает, возвращает ошибку:

# GET /infos/
undefined local variable or method `img_style' for #<#:0xc470cc4>

Это можно сделать без создания избыточных частичных данных?

Простите за мой английский. : P

EDIT:

В информации о модели скважины нет: img_style field

# 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:

Даже простой

<%= img_style %>

не работает.

Application Stack Trace

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:

Просмотры

# infos/index.html.erb

<%= t('info.infos') %>

<% first = @infos.shift %>
<% @aimg_style = "original"%> <%= render 'info', :locals => {@img_style => @aimg_style } %>
    <% @infos.each do |e| %>
  • <%= render :partial => 'info', :object => e %>
  • <% end %>
<%= will_paginate @infos %>

# infos/_info.html.erb
<%#= link_to thumbnail(info, "listTabsImg", false, img_style), info %>
  <%#= image_tag(info.image.url()) %>
  <%= img_style %>

<%= link_to info.title, info %> <%= info.short %>... <%= link_to "#{t('more')} »", info %>

НАКОНЕЦ

Это не работает:

# infos/index.html.erb
<% first = @infos.shift %>
<% @aimg_style = "original"%> <%= first %> <%= render 'info', :locals => {:info => first, :img_style => @aimg_style } %>

Это работает:

# infos/index.html.erb
  <% @infos.each do |e| %>
    
  • <%= render :partial => 'info', :locals => {:info => e, :img_style => "original"} %>
  • <% end %>

    Кто-нибудь знает, почему?

    26
    задан Community 23 May 2017 в 12:32
    поделиться