0

我正在尝试在我的管理区域中显示特定用户的帐单详细信息。我要做的就是在文本字段中输入用户 ID,然后按提交,链接到该 user_id 的帐单将显示在下表中。到目前为止,这是我的 cac 付出的努力:

管理员/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 来说还是很新,我所做的一切总是错误的,所以这可能也是,我该如何解决?

4

2 回答 2

1
def show_billings
    if params[:user_id]
      @billings = Billing.where(:user_id => params[:user_id])
    else
      @billings = Billing.where(:user_id => '22')
end

让我知道你是怎么办的。

于 2012-12-27T20:51:47.107 回答
1

嗯,你是show_billings从你的index行动中调用的吗?您向我们展示了index.html.erb在操作之后呈现的内容index。该表单确实发布到show_billings,但show_billing.html.erb通常会呈现 。

因此,或者,在您的 中写入index.html.erb类似这样的内容,@billings = []这样您就不会收到错误,并让show_billings渲染与 index.html 相同的视图。但是,我什至看不到真正需要单独的操作:让搜索表单再次进入索引?无论如何,它是相同的代码。

于 2012-12-27T22:47:45.540 回答