在Ruby中,如何在f.number_field中添加多个用户输入?

时间:2016-10-15 04:23:25

标签: ruby-on-rails ruby heroku web-applications

我是一个完整的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中,但我该怎么做?然后将其存储在数据库中。

1 个答案:

答案 0 :(得分:0)

好的,您可以在视图中看到您的模型和控制器。将要发生的是您将填写新视图中的总计表单。点击提交按钮,该按钮将向您的控制器操作create发出请求。在create操作中,它将调用total_params方法,该方法只是检查params哈希(其中包含您在表单中的所有信息)视图)确保它具有:total键的值,并允许传入:cake:icecream(这是调用强参数或白名单参数),{{ 1}}关键字只是因为不能直接从控制器外部访问private动作。然后在total_params方法中,create外观将迭代调用each返回的哈希值,然后将其添加到变量total_value。每个循环完成一个total_params记录的一个将在他们的数据库中创建,其Total列值是totalicecream的总和。这与您存储值的方式大致相同。

查看

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