簡體   English   中英

從控制器中的視圖傳遞值

[英]Passing value from view in controller

我將值(由用戶輸入)從視圖傳遞給控制器​​方法,該方法又從DB獲取數據。 下面是我認為的代碼

<%= form_tag({:controller=>"billings", :action=>"tablebill"}, method: :get) do %>
  <div class="center-data">Table Number:
    <div class="tinput"> <%= text_field_tag(:tableno) %></div>
  </div>
  <div class="ebutton">
    <%= submit_tag "Enter" %>
  </div>
<% end %>

值tableno是我的控制器方法中需要的,並且編碼如下

def tablebill
  @orders = List
   .select("itemname,tableno,quantity,amount")
   .where(:tableno => params[:tableno]).to_a

  @orders.each do |order|
    @totamount = @totamount + order.amount
  end

  @tax = @totamount/5
  @finalamount = @totamount + @tax

  respond_to do |format|
    format.html # tablebill.html.erb
  end  
end

該值已在查詢中成功傳遞,但返回nil。 以下是我的服務器中的代碼段

Started GET "/billings/tablebill?utf8=%E2%9C%93&tableno=08&commit=Enter" for 127
.0.0.1 at 2013-09-05 15:50:01 +0530
  Processing by BillingsController#tablebill as HTML
  Parameters: {"utf8"=>"√", "tableno"=>"08", "commit"=>"Enter"}
  List Load (1.0ms)  SELECT itemname,tableno,quantity,amount FROM `lists` WHERE
`lists`.`tableno` = '08'
Completed 500 Internal Server Error in 230ms

NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.+):
  app/controllers/billings_controller.rb:8:in `block in tablebill'
  app/controllers/billings_controller.rb:7:in `each'
  app/controllers/billings_controller.rb:7:in `tablebill'

問題是當我在Rails控制台上執行相同的查詢時,會給出結果。 以下是Rails控制台中的代碼段

irb(main):073:0> @orders = List.select("itemname,tableno,quantity,amount").where(:tableno => '08')
=> [#<List tableno: "08", itemname: "test81 ", quantity: "1", amount: "
3.25">, #<List tableno: "08", itemname: "Test82", quantity: "1", amou
nt: "3.75">, #<List tableno: "08", itemname: "Test83", quantity: "1
", amount: "3.75">]

我已經嘗試了很多幾乎所有數據庫中都存在的值,但是每次通過視圖完成時都是相同的,並且通過Rails控制台執行查詢時會得到結果。 在發布此處之前,我已經嘗試了很多,因為我認為傳遞值不會有任何問題。 只是選擇查詢不起作用。 請指教。 謝謝。

我不認為這是因為params[:tableno]為零,我認為這是因為您尚未初始化@totamount 然后,當您嘗試向其添加第一個order.amount ,由於無法添加到nil ,您將收到錯誤消息。

嘗試在循環前設置@totamount = 0或執行以下操作:

@totamount = order.map(&:amount).inject(&:+)

將所有金額加在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM