我有一个名为cashcount的页面,在页面上,我希望用户能够输入季度,角钱,镍币,便士(数量,而不是价值),每种账单数量等的数量进入表单的文本字段。
当用户点击按钮提交数据时,我想自动将所有字段汇总到它们的货币值中,并将其存储在我的shifting.startcash字段(十进制类型)中。
设置此表单的最佳方法是什么?
这是我的pages_controller.rb
# Cash Count
def cashcount
@title = "Count Cashbox"
@shift = Shift.find(session[:shift_id])
end
我知道在我的shift的控制器中,我可能想要制作一个def update_cashstart之类的方法,以便我可以从文本字段中获取值并总结它们,但我不确定如何去这样做。
更新代码:
这是我写的,但它似乎没有更新任何东西:
countcash.html.erb:
<%= form_for :shift do |f| %>
<div class="coins">
Coins: <br />
Quarters: <%= f.text_field :quarters %><br />
Dimes: <%= f.text_field :dimes %><br />
Nickels: <%= f.text_field :nickels %><br />
Pennies: <%= f.text_field :pennies %><br /><br />
</div>
<div class="bills">
Bills: <br />
Twenties: <%= f.text_field :twenties %><br />
Tens: <%= f.text_field :tens %><br />
Fives: <%= f.text_field :fives %><br />
Ones: <%= f.text_field :ones %><br /><br />
</div>
<div class="other">
Please enter the dollar amount of any other money in the drawer:
Other: <%= f.text_field :others %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Shift.rb
before_save :sum_coinage, :unless => :all_coins_blank?
def all_coins_blank?
if (@quarters.nil? and @nickels.nil? and @dimes.nil? and @pennies.nil? and @twenties.nil? and @tens.nil? and @fives.nil? and @ones.nil? and @others.nil?)
true
else
false
end
end
def sum_coinage
self.cashstart = ((@quarters * 0.25) + (@nickels * 0.05) + (@dimes * 0.10) + (@pennies * 0.01) + (@twenties * 20) + (@tens * 10) + (@fives * 5) + @ones + @others)
end
这是rails服务器的输出:
Started POST "/countcash" for 127.0.0.1 at Mon Aug 08 17:22:30 -0400 2011
Processing by PagesController#countcash as HTML
Parameters: {"commit"=>"Save Shift", "shift"=>{"quarters"=>"55", "others"=>"", "tens"=>"", "fives"=>"", "dimes"=>"5", "ones"=>"", "pennies"=>"", "twenties"=>"", "nickels"=>""}, "authenticity_token"=>"IQsaKJARVrQOveEC/UTll2iFZ0OWvRmvNxGkqI6DRLE=", "utf8"=>"✓"}
它似乎并没有将这些更新推送到实际数据库:|
答案 0 :(得分:1)
这是你应该在你的模型中做的事情。我会为你想要的每种面额创建一个虚拟属性(一个实际上不由数据库支持的模型属性)。然后,您可以对硬币值求和,并使用before_create过滤器进行分配。
class Shift < ActiveRecord::Base
attr_accessor :quarters, :nickels, :dimes, :etc
before_create :sum_coinage
def sum_coinage
self.startcash = (@quaters * 0.25) + (@nickels * 0.05) + (@dimes * 0.10)
end
end
然后你的视图可以使用普通输入字段来表示不同的硬币
<% form_for :shift do |f| %>
<%= f.text_field :quarters %>
<%= f.text_field :nickels %>
etc
<% end %>