我是一个完整的Ruby noob,所以请向我解释一下,就像我是5.我有一个有七个f.number_fields的表单。我想添加它们并将它们存储在:total。以下是我所说的一个例子:
<%= f.label :icecream %><br>
<%= f.number_field :icecream %>
<%= f.label :cake %><br>
<%= f.number_field :cake %>
所以在这种情况下,我想从以下用户输入:icecream和:cake并添加它们并将其存储在:total中,但我该怎么做?然后将其存储在数据库中。
答案 0 :(得分:0)
好的,您可以在视图中看到您的模型和控制器。将要发生的是您将填写新视图中的总计表单。点击提交按钮,该按钮将向您的控制器操作create
发出请求。在create
操作中,它将调用total_params
方法,该方法只是检查params
哈希(其中包含您在表单中的所有信息)视图)确保它具有:total
键的值,并允许传入:cake
和:icecream
(这是调用强参数或白名单参数),{{ 1}}关键字只是因为不能直接从控制器外部访问private
动作。然后在total_params
方法中,create
外观将迭代调用each
返回的哈希值,然后将其添加到变量total_value。每个循环完成一个total_params
记录的一个将在他们的数据库中创建,其Total
列值是total
和icecream
的总和。这与您存储值的方式大致相同。
查看
cake
控制器
#app/views/totals/new.html.erb
<%= form_for @total, url: {action: "create"} do |f| %>
<%= f.label :icecream %><br>
<%= f.number_field :icecream %>
<%= f.label :cake %><br>
<%= f.number_field :cake %>
<%= f.submit %>
模型
#app/controllers/totals_controller.rb
class TotalsController << ApplicationController
def create
total_value = 0
total_params.each do |k, v|
total_value += v
end
Total.create(total: total_value)
end
private
def total_params
params.require(:total).permit(:cake, :icecream)
end
end