0

我是 Ruby on Rails 的新手,我有以下问题:
如果控制器中有方法:

def showbudgets
render :layout => false
username = session[:username]
time = Time.new
@budgets = Budget.findAll(username, time.year)
end

当我使用 logger.debug 检查时,我在@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 %>

我正在使用 ajax 请求,所以我不想在我的视图上应用布局现在如果我删除该行

render :layout => false 

它显示记录,否则不显示

4

2 回答 2

1

View is being render when you call your 'render' method. This means, that that inside the view there is no @budgets variable defined, hence it will return null.

You need to reorder your action, so render is at the end.

于 2013-09-09T11:07:31.687 回答
0

您可以将 respond_to 用于不同格式的响应。代码可能:

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

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

于 2013-09-09T10:24:00.033 回答