【问题标题】:ActiveAdmin -- How to access instance variables from partials?ActiveAdmin——如何从部分访问实例变量?
【发布时间】:2011-11-09 14:39:51
【问题描述】:

我似乎无法访问部分实例对象。示例:

在控制器中我有:

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

【问题讨论】:

  • 在 Ruby 中使用 for 循环太可怕了 :(
  • 对不起,我在实际代码中有 .each 但由于某种原因最终在这里输入! :) (该死的 php 背景)

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


【解决方案1】:

在渲染局部时,您需要主动定义赋予该局部的变量。换行

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 传递局部变量”部分)。

【讨论】:

    【解决方案2】:

    你必须将你的实例变量传递给你的局部变量才能在那里使用它:

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

    【讨论】:

    • 从技术上讲,您首先进入了这里(尽管 1 秒)。可惜你没有得到荣誉。我给你投了赞成票;)
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多