2014-06-20 42 views
2

我有一個form_for,包含2個日期字段和1個整數。Rails將生成的js參數從窗體傳遞到控制器

  • :開始,ID: 「開始」
  • :年底ID: 「結束」
  • :NUMBER_OF_DAYS,ID: 「NUMBER_OF_DAYS」

我的JS:

$(document).ready(function(){ 
    $("#start, #end").on('change', function() { 
    var start = $('#start').datepicker('getDate'); 
    var end = $('#end').datepicker('getDate'); 
    var duration = (end.getDate() - start.getDate())/1000/60/60/24; 

    $("#number_of_days").val(duration); 
    }); 
}); 

變量「持續時間」的值在表格中的number_of_days字段中顯示爲罰款,但如何在提交表單時將生成的:number_of_days傳遞給控制器​​?

謝謝

編輯: 的form_for:

<%= form_for(@vacation) do |f| %> 
    <div class="row"> 
    <div class="large-2 columns"><%= f.label :start, "Starts On" %></div> 
    <div class="large-10 columns left"><%= f.text_field :start, data:{ type: 'date'}, id: 'start' %></div> 
    </div> 

    <div class="row"> 
     <div class="large-2 columns"><%= f.label :end, "Ends On" %></div> 
     <div class="large-10 columns left"><%= f.text_field :end, id: 'end' %></div> 
    </div> 
    <div class="row"> 
     <div class="large-2 columns"><%= f.label :number_of_days, "Duration In Days" %></div> 
     <div class="large-10 columns left"><%= f.text_field :number_of_days, disabled: true, id: 'number_of_days' %></div> 
    </div> 
    <div class="row"> 
     <div class="large-10 large-offset-2 columns"> 
     <%= f.submit nil, class: 'button small radius success' %> 
     </div> 
    </div> 
<% end %> 

控制器動作新創建:

def new 
    @vacation = Vacation.new 
end 

def create 
    @vacation = Vacation.new(vacation_params) 
    @vacation.user = current_user 
    @vacation.number_of_days = params[:number_of_days] 
    respond_to do |format| 
    if @vacation.save 
     format.html { redirect_to @vacation, notice: 'Vacation was successfully created.' } 
    else 
     format.html { render action: 'new'} 
    end 
    end 
end 

許可證PARAMS私下:

def vacation_params 
    params.require(:vacation).permit(:start, :number_of_days, :end) 
end 
+0

你可以嘗試找出與紅寶石的區別...你已經有嗎? – jandresrodriguez

+0

它實際上是我的項目中要求在提交表單之前立即在指定的text_field中顯示天數.. – Shalaby

+0

number_of_days值是否在控制器的params散列中不存在? –

回答

1

只是看着你的形式與注意到了這一點:

<div class="large-10 columns left"><%= f.text_field :number_of_days, disabled: true, id: 'number_of_days' %></div> 

你有禁用:真正這個領域,所以當您提交表單它的價值沒有得到提交。您需要更新您的js文件這樣的:

$(document).ready(function(){ 
    $("#start, #end").on('change', function() { 
    var start = $('#start').datepicker('getDate'); 
    var end = $('#end').datepicker('getDate'); 
    var duration = (end.getDate() - start.getDate())/1000/60/60/24; 

    $("#number_of_days").val(duration).attr("disable","false"); 
    }); 
}); 

OR

一個更好的解決辦法是讓你的領域只讀,而不是將其禁用。你可以這樣做:

<div class="large-10 columns left"><%= f.text_field :number_of_days, readonly: true, id: 'number_of_days' %></div> 
+0

我試過你的suggesstion,但沒有奏效,我甚至從文本字段中刪除了「disable:true」,但它仍然不會這樣做,只讀不會得到它仍然保存.. – Shalaby

+0

什麼params是你刪除後禁用禁用:真正的領域? – Mandeep

+0

「開始」和「結束」誰有值,然後「number_of_days」的值:「」...我想禁用或標記爲只讀不影響傳遞數據.. – Shalaby

相關問題