Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 3, passing local variable to partial [duplicate]

Possible Duplicate:
Rails: confused about syntax for passing locals to partials

I want to pass local variable(which doesn't have relevant field in model) to partial.

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

:img_style will be html style for image.

# 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 

But it does not work, it returns error:

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

It can be done without making redundant partials?

Sorry for my English. :P

EDIT:

Well model Info don't have :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:

Even simple

<%= img_style %> 

don't works.

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:

Views

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

FINALLY

This don't works:

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

This works:

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

Anybody know why?

like image 820
nothing-special-here Avatar asked Jun 08 '11 13:06

nothing-special-here


2 Answers

I actually just use this syntax in Rails 3:

render "a_partial", :a_local_variable => whatever, :another_variable => another 
like image 188
d11wtq Avatar answered Sep 19 '22 08:09

d11wtq


This should work:

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

With this partial:

# infos/_info.html.erb <%= image_tag(info.image.url, :class => img_style),  info %> 

However if you are calling the partial wrong then try this as the partial:

# infos/_info.html.erb <%= image_tag(info.image.url(img_style)),  info %> 
like image 20
Devin M Avatar answered Sep 20 '22 08:09

Devin M