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 を nil にしないようにしています。

undefined method `each' for nil:NilClass

def show_billings が必要かどうかはわかりませんが、まだ Rails にかなり慣れていないため、これまでに行ったことはすべて常に間違っているため、これもおそらくそうです。どうすれば修正できますか?

4

2 に答える 2

1

うーん、アクションshow_billingsから呼び出しますか?アクションの後にレンダリングされる をindex示します。フォームは に投稿しますが、通常は をレンダリングします。index.html.erbindexshow_billingsshow_billing.html.erb

したがって、エラーが発生しないindex.html.erbように、次のように記述し、同じビューをインデックスとしてレンダリングさせます。しかし、別のアクションが本当に必要だとは思いません。検索フォームを再びインデックスに移動させますか? とにかく同じコードです。@billings = []show_billings

于 2012-12-27T22:47:45.540 に答える
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 に答える