从方法渲染局部变量 - 局部变量未传递?

时间:2011-03-07 04:20:46

标签: ruby-on-rails

Rails 2.3.5

这是我第一次尝试在AJAX调用的方法中呈现部分,其中partial需要局部变量。查询工作正常,我无法弄清楚出了什么问题,到目前为止我无法通过搜索找到任何内容。部分正在渲染,本地传递给它的视图完全相同。

@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

在Partial中我添加了:

<% users = users || @users %>

我无法真正改变整个局部因为部分最初是从组索引页面调用的,并且需要一组唯一的用户,这些用户基于首次生成“show”页面时选择的一个组。

我仍然想知道为什么在方法中将局部传递给局部是不起作用的 - 比如我需要以不同于将局部传递到视图中的局部的方式,或者传递方式本地人只是从方法不起作用 - 谢谢!

2 个答案:

答案 0 :(得分: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错误。

答案 1 :(得分:0)

也许我找到了一个(不是)你的问题的解决方案。 而不是在部分&lt;%users = users ||中设置局部变量@users%&gt; (根据我的理解,你应该只在局部使用局部变量), 您可以在..js.erb文件中的render命令中设置locals,如:

.update(“&lt;%= escape_javascript(render(:partial =&gt;”/ users / group_list“,:locals =&gt; {:users =&gt; @users}))%&gt;

你仍然需要在控制器方法中创建一个@users var。