2011-03-07 149 views
0

Rails 2.3.5從方法渲染局部變量 - 局部變量不通過?

這是我第一次嘗試從AJAX調用中的方法渲染局部變量的局部變量。查詢工作正常,我無法弄清楚什麼是錯誤的,到目前爲止我無法通過搜索找到任何東西。部分渲染與本地傳遞給它完全相同的方式在視圖中。

@group = Group.find(params[:group_id]) 

respond_to do |format| 
    format.html {render :partial => 'group_show_user_list', :locals=>{:users=>@group.users}} 
    format.js 
end 

錯誤:

ActionView::TemplateError (undefined local variable or method `users' for #<ActionView::Base:0x8a33030>) on line #16 of app/views/groups/_group_show_user_list.html.erb: 
13:  <tbody> 
14: 
15: 
16: <% users.each do |user| %> 
17: 
18:   <tr id="dir_user_<%= user.id %>"> 
19:    <td> 

是否有可能當部分從方法內呈現給本地變量傳遞到部分?或者我應該將部分改爲實例變量?

非常感謝!

編輯:

這是不是一個真正的答案,但在控制器我說:

@users = @group.users 

,並在部分我說:

<% users = users || @users %> 

我真的不能因爲部分最初是從組索引頁面調用的,並且需要基於首次生成'show'頁面時選擇的一個組的唯一一組用戶,所以更改整個部分。

我仍然很想知道爲什麼在方法中傳遞局部方法不起作用 - 就像我需要以與將視圖中的局部方法傳遞給局部方法時不同的方式,或者如果傳遞當地人只是不從一種方法工作 - 謝謝!

+0

一切都看起來正確如果你渲染整個頁面而不是部分它的作品 – 2011-03-07 04:41:10

+0

是的,我會在頁面上有7個其他部分轉換爲ajax('show'頁面是一個大用戶管理頁面)。下一個也有一個從組索引頁面獲取局部變量的部分。我會看到早晨當我嘗試另一個時會發生什麼。如果我仍然無法實現它,至少該解決方法很容易。我應該嘗試發送一個簡單的硬編碼字符串「YES」作爲本地來查看它是否在早晨有效。 – Reno 2011-03-07 04:52:56

+0

只需調試您的Ajax調用。因爲除了一切看起來不錯 – Ashish 2011-03-07 04:57:31

回答

1

您確定它是respond_to :html?在其他基於Rack的應用程序中,我經常發現它是針對AJAX調用的respond_to :js

對於測試,您可以使用render :blah, :layout=>request.xhr?打開或關閉ajax請求的佈局,以便您可以在瀏覽器中測試路由。

您也可能想要做的:

@group = Group.find(params[:group_id]) 
render :nothing => true, :status => :not_found and return unless @group 

這將至少讓你在瀏覽器的AJAX錯誤。

0

也許我找到了一個(不是)你的問題的解決方案。 而不是在您的部分<%users = users ||中設置局部變量@users%> (根據我的理解,你應該只使用本地變量中的諧音), 可以在..js.erb文件中設置的渲染命令當地人,如:

.update( 「<%= escape_javascript(render(:partial =>」/ users/group_list「,:locals => {:users => @users}))%>

您仍然必須創建@users var控制器方法