8

我似乎無法訪問部分中的實例對象。例如:ActiveAdmin - 如何從部分訪問實例變量?

在控制器I具有:

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部分I具有:

<% @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 %> 
+0

在Ruby中使用for循環非常可怕:( – halfdan

+0

對不起,我有.each在實際的代碼中,但由於某種原因最終在這裏輸入!:)(該死的PHP背景) – Hopstream

回答

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傳遞本地變量」)。

9

你有你的實例變量傳遞給你的部分以便在那裏使用它:

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

技術上你第一次在這裏(儘管1秒)。 Bummer你沒有得到榮譽。我給了你一個投票;) – Jurgen