Ruby on rails 布局为false时ruby on rails控制器不传递对象

Ruby on rails 布局为false时ruby on rails控制器不传递对象,ruby-on-rails,layout,view,controller,Ruby On Rails,Layout,View,Controller,我是RubyonRails新手,有以下问题: 如果控制器中有方法: def showbudgets render :layout => false username = session[:username] time = Time.new @budgets = Budget.findAll(username, time.year) end 当我使用logger.debug检查@budgets时,我在@budgets中得到了两条记录 我有以下看法: <h2>Listing Bu

我是RubyonRails新手,有以下问题:
如果控制器中有方法:

def showbudgets
render :layout => false
username = session[:username]
time = Time.new
@budgets = Budget.findAll(username, time.year)
end
当我使用logger.debug检查@budgets时,我在@budgets中得到了两条记录

我有以下看法:

<h2>Listing Budgets</h2>
<% if @budgets != nil %>
<table style="width:500px">
<tr>
<th>Year</th>
<th>Month</th>
<th>Amount</th>
</tr>
<% @budgets.each do |budget| %>
<tr>
<td><%= budget.budgetyear %></td>
<td><%= budget.budgetmonth %></td>
<td><%= budget.amount %></td>
</tr>
<% end %>
</table>
<% else %>
<br/>
No budgets set...
<% end %>

它会显示记录,否则就无法对不同格式的响应使用respond\u。代码可能:

respond_to do |format|
  format.html {}           # html response
  format.json { @budgets } # json as a api or something
  format.js   {}           # js response
end

对于js响应,您应该在相应的视图文件夹中创建一个action_name.js.erb文件,并将要执行的js代码放入其中。

调用“render”方法时,视图正在渲染。这意味着,在视图中没有定义@budgets变量,因此它将返回null

您需要对动作进行重新排序,以便在最后进行渲染

respond_to do |format|
  format.html {}           # html response
  format.json { @budgets } # json as a api or something
  format.js   {}           # js response
end