2017-11-22 11 views
2

私はレールフォームを書いて、それにjavascriptを追加するまでうまくいきました。このjavascriptは、フィールド値の合計をユーザーが入力して合計フィールドに保存するため、ユーザーは手動で合計する必要はありません。ここrails - データベースにファイル値を保存しないフォームフィールドに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 %> 

は今、私は、フォームを記入する際、機能が正常に動作し、ボタンを提出するだけでなく、レコードが作成されますが、これらの数値フィールドに入力されたすべての値は、データベースに格納されていないとそれはゼロを示す。番号フィールドから削除しても問題ありません。私が間違って何をしているのか?ありがとう。 EDIT: ここでは私のparamsです:

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 
+0

は、あなたがのparamsを投稿できるとコントローラのアクションしてください:だから、あなたが提出しないとき、それは次のオブジェクトを生成しますか? – Eoghain

答えて

0

問題は、あなたが '名前' の属性をオーバーライドしていることです。彼らは、たとえば:name="payment[fines]"のようにする必要があります。同様にあなたのコントローラにspectedさ

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

(payment_params)

関連する問題