Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在控制器中从视图传递值_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在控制器中从视图传递值

Ruby on rails 在控制器中从视图传递值,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我将用户输入的VIEW中的一个值传递给控制器方法,该方法反过来从DB中获取数据。下面是我认为的代码 <%= form_tag({:controller=>"billings", :action=>"tablebill"}, method: :get) do %> <div class="center-data">Table Number: <div class="tinput"> <%= text_field_tag(:table

我将用户输入的VIEW中的一个值传递给控制器方法,该方法反过来从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 %>
正在查询中成功传递该值,但返回的值为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">]

我对数据库中几乎所有的值都做了很多尝试,但每次都是通过view完成的,并且在通过rails控制台执行查询时得到了结果。我在这里发布之前已经尝试了很多,因为我认为传递值没有任何问题。只是select查询不起作用。请告知。谢谢。

我不认为这是因为params[:tableno]为零,我认为这是因为您尚未初始化@totamount。然后,当您尝试将第一个order.amount添加到它时,您将得到一个错误,因为您无法添加到nil

尝试在循环之前设置@totamount=0或执行以下操作:

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

将所有金额相加。

您是否检查了控制器中的参数[:tableno]中的值?是..它是08。这就是从视图传递的内容:tableno的字段类型是什么?这是一个简单的错误,我想试试这个参数[:tableno]_i@depa:它的文本值很好。我按照建议做了尝试,但现在没有给出任何错误,也没有获取值。它将转到我的方法format.html tablebill.html.erb中提到的下一页。它的显示页面,但没有填充Vlaue。而是显示“@totamount”和“@tax”,但不显示值。所以我假设这些值没有经过计算。这听起来像是你把@totamount和@tax放在你的视图中,而没有做,例如,oops。谢谢你指出这个错误。在纠正这个问题后刚刚检查过,但还是很倒霉。这次没有值。一切都是空白的。在控制台上再次检查。所有值均按预期计算。谢谢。我解决了这个问题。一切都准备好了。再次感谢你所做的一切。
@totamount = order.map(&:amount).inject(&:+)