【问题标题】:rails - adding JavaScript function to form field not saving filed value in databaserails - 向表单字段添加 JavaScript 函数,而不是在数据库中保存字段值
【发布时间】:2017-11-22 17:50:55
【问题描述】:

我写了一个 Rails 表单,它工作正常,直到我添加了一个 javascript。此 javascript 汇总用户输入的字段值并将它们保存在总计字段中,因此用户不必手动总计。

这是我的代码:

<script type="text/javascript">
  function findTotal(){
    console.log("this is working")
      var arr = document.getElementsByName('qty');
      var tot=0;
      for(var i=0;i<arr.length;i++){
          if(parseInt(arr[i].value))
              tot += parseInt(arr[i].value);
      }
      document.getElementById('total').value = tot;
  }
</script>
<%= bootstrap_form_for(@payment) do |f| %>
  <div class="field">
    <%= f.text_field :student_id,label: "Admission Number of Student" %>
  </div>
  <div class="field">
    <%= f.number_field :tuition_fee , onblur: "findTotal()", id: "qty1", name: "qty" %>
  </div>
  <div class="field">
    <%= f.number_field :fine, onblur: "findTotal()", id: "qty2", name: "qty" %>
  </div>
  <div class="field">
    <%= f.number_field :previous_books, onblur: "findTotal()", id: "qty3", name: "qty" %>
  </div>
  <div class="field">
    <%= f.number_field :annual_fund, onblur: "findTotal()", id: "qty4", name: "qty" %>
  </div>
  <div class="field">
    <%= f.hidden_field :total, name: "total",  id: "total" %>
  </div>
  <div class="actions">
    <%= f.submit  class: "btn btn-success" %>
  </div>
<% end %>

现在,当我填写表格时,该功能可以正常工作,并且提交按钮也会创建记录,但是在这些数字字段中输入的所有值都没有存储在数据库中,它显示为 nil。如果我从数字字段中删除它,这些工作正常。知道我做错了什么吗?谢谢。 编辑: 这是我的参数:

   private
    # Use callbacks to share common setup or constraints between actions.
    def set_payment
      @payment = Payment.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def payment_params
      params.require(:payment).permit(:student_id, :section_id, :year, :month, :date, :payment_mode, :tuition_fee, :fine, :previous_books, :annual_fund, :total)
    end
end

及相关控制器方法:

  def create
    @payment = Payment.new(payment_params)
    @payment.student_id = Student.find_by_admission_number(@payment.student_id).id
    @payment.section_id = Student.find(@payment.student_id).section_id

    respond_to do |format|
      if @payment.save
        format.html { redirect_to new_payment_path, notice: 'Payment Record was successfully created.' }
        format.json { render :show, status: :created, location: @payment }
      else
        format.html { render :new }
        format.json { render json: @payment.errors, status: :unprocessable_entity }
      end
    end
  end

【问题讨论】:

  • 你能把参数和控制器动作也贴出来吗?

标签: javascript ruby-on-rails forms


【解决方案1】:

问题是您正在覆盖“名称”属性。例如,它们应该是:name="payment[fines]"。因此,当您提交时,它会生成以下对象:

Parameters=> { payment => { fines: value} } 

这是在您的控制器中指定的 (payment_params)

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多