我正试图在我的管理区域中显示特定用户的计费详细信息。我只想在文本字段中输入一个用户id,然后按submit,链接到该用户id的账单将显示在下表中。以下是我迄今为止的笨拙努力:
admin/index.html.erb
<%= form_tag(:action => "show_billings") do %>
<div class="field">
<p>User ID</p>
<%= text_field_tag :user_id %>
</div>
<div class="actions">
<%= submit_tag "Show Billing For This User", :class => 'btn btn-success' %>
</div>
<% end %>
<table class="table table-hover table-striped table-bordered">
<thead style="background-color: #efefef">
<tr>
<th>Date</th>
<th>Description</th>
<th>Debits</th>
<th>Credits</th>
<th>Balance</th>
</tr>
</thead>
<tbody>
<% @billings.each do |billing| %>
<tr>
<td><%= billing.date %></td>
<td><%= billing.description %></td>
<td><%= number_to_currency(billing.debits) %></td>
<td><%= number_to_currency(billing.credits) %></td>
<td><%= number_to_currency(billing.balance) %></td>
</tr>
<% end %>
</tbody>
</table>
admin_controller.rb
def show_billings
billings = Billing.where(:user_id => params[:user_id])
if billings.nil?
@billings = Billing.where(:user_id => '22')
else
@billings = billings
end
end
我得到了以下错误,这就是为什么我试图让@billings不为零:
undefined method `each' for nil:NilClass
我不知道def-show_billings是否是必要的,对rails来说还是很新的,而且我所做的一切都是错误的,所以这可能也是,我该如何解决它?
嗯,您从index
操作中调用show_billings
吗?您向我们展示了在index
操作之后渲染的index.html.erb
。该表单确实发布到show_billings
,但通常会呈现show_billing.html.erb
。
因此,或者,在index.html.erb
中编写类似@billings = []
的内容,这样就不会出现错误,并让show_billings
呈现与索引相同的视图。但是,我甚至不认为真正需要单独的操作:让搜索表单再次进入索引?无论如何,它都是相同的代码。
def show_billings
if params[:user_id]
@billings = Billing.where(:user_id => params[:user_id])
else
@billings = Billing.where(:user_id => '22')
end
让我知道你进展如何。