ActiveAdmin - 如何从partials访问实例变量?

时间:2011-11-09 14:39:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 activeadmin

我似乎无法访问partials中的实例对象。例如:

在控制器中我有:

ActiveAdmin.register Store do
  sidebar "Aliases", :only => :edit do
    @aliases = Alias.where("store_id = ?", params[:id])
    render :partial => "store_aliases"
  end
end

然后在_store_aliases.html.erb部分我有:

<% @aliases.each do |alias| %>
  <li><%= alias.name %></li>
<% end %>

这不起作用。唯一有用的东西(由于我在视图中放置逻辑,这很可怕):

  <% @aliases = Alias.where("store_id = ?", params[:id]) %> 
  <% @aliases.each do |alias| %>
     <li><%= alias.name %></li>
  <% end %>

2 个答案:

答案 0 :(得分:17)

渲染部分时,您需要主动定义赋予该部分的变量。改变你的行

render :partial => "store_aliases"

render :partial => "store_aliases", :locals => {:aliases => @aliases }

在部分内部,变量可以作为局部变量(不是实例变量!)访问。您需要通过删除@来调整部分内部的逻辑。

<% aliases.each do |alias| %>
  <li><%= alias.name %></li>
<% end %>

如需进一步阅读,请查看API documentation(特别是“3.3.4传递局部变量”部分)。

答案 1 :(得分:10)

您必须将实例变量传递给partial,才能在那里使用它:

ActiveAdmin.register Store do
  sidebar "Aliases", :only => :edit do
    @aliases = Alias.where("store_id = ?", params[:id])
    render :partial => "store_aliases", :locals => { :aliases => @aliases }
  end 
end

然后在您的部分中,您将能够将其用作局部变量

<% aliases.each do |alias| %>
  <li><%= alias.name %></li>
<% end %>