2016-11-19 47 views
2

當我創建一個新帖子(passengerride)時,它成功地在數據庫中存儲多個值。但是,當我嘗試編輯帖子(passengerride)時,複選框變得沒有選中。Ruby on Rails:當試圖編輯帖子時,複選框被取消選中

這是我的形式:

應用程序/視圖/ passengerrides/_form.html.erb:

<%= form_for @passengerride do |f| %> 
     ...... 
      <div class="form-group "> 
      <div class="control-label col-sm-2 requiredField"> 
       <%= f.label :okwithgender, 'Driver should be:' %> 
       <span class="asteriskField">*</span> 
      </div> 

      <div class="col-sm-8"> 
       <div class=" "> 
       <div class="checkbox"> 

        <label class="checkbox"><input id="okwithgender" type="checkbox" value="Male" name="passengerride[okwithgender][]">Male</label> 

       </div> 
       <div class="checkbox"> 

        <label class="checkbox"><input id="okwithgender" type="checkbox" value="Female" name="passengerride[okwithgender][]">Female</label> 

       </div> 
       <div class="checkbox"> 

        <label class="checkbox"><input id="okwithgender" type="checkbox" value="Other" name="passengerride[okwithgender][]">Other</label> 

       </div> 
       <div class="checkbox"> 

        <label class="checkbox"><input id="okwithgender" type="checkbox" value="Any Gender" name="passengerride[okwithgender][]">Any Gender</label> 

       </div> 
       </div> 
      </div> 
      </div> 

    .... 
<% end %> 

應用程序/控制器/ passengerrides_controllers:

def passengerride_params 
     params[:passengerride][:okwithgender] = params[:passengerride][:okwithgender].join(', ') 
     params.require(:passengerride).permit(:origin, :destination ... :okwithgender) 
    end 

我估計用這個<%= f.check_box ... %>將解決問題,但我不知道如何寫相當於 <input id="okwithgender" type="checkbox" value="Male" name="passengerride[okwithgender][]">

回答

1

您應該開始使用Rails窗體幫助器表單域。 http://guides.rubyonrails.org/form_helpers.html

就你而言,我認爲你應該嘗試使用單選按鈕實現這一點,因爲任何人都只會選擇其中一個選項。

<%= f.radio_button :okwithgender, 'Male' %> 
<%= f.label :okwithgender, 'Male', value: 'Male' %> 
<%= f.radio_button :okwithgender, 'Female' %> 
<%= f.label :okwithgender, 'Female', value: 'Female' %> 
<%= f.radio_button :okwithgender, 'Other' %> 
<%= f.label :okwithgender, 'Other', value: 'Other' %> 
<%= f.radio_button :okwithgender, 'Any Gender' %> 
<%= f.label :okwithgender, 'Any Gender', value: 'Any Gender' %> 

要通過複選框選擇多個做到這一點,

f.check_box :okwithgender, {multiple: true}, 'Male' 
f.label :okwithgender, 'Male', value: 'Male' 
f.check_box :okwithgender, {multiple: true}, 'Female' 
f.label :okwithgender, 'Female', value: 'Female' 
f.check_box :okwithgender, {multiple: true}, 'Other' 
f.label :okwithgender, 'Other', value: 'Other' 
f.check_box :okwithgender, {multiple: true}, 'Any Gender' 
f.label :okwithgender, 'Any Gender', value: 'Any Gender' 
+0

我正在構建一個拼車應用程序,用戶必須選擇驅動程序的性別(可能是男性或男性和女性)。 我試過了:<%= f.check_box:okwithgender,{},'Male'%> 但是它相當於: 我需要這樣的東西 nais

+0

@SainathReddy編輯我的答案。讓我知道這是否適合你。 –

+0

當我檢查一個值,它存儲的字符串和未選中的值存儲爲0.它存儲0,男,0,0,0當我檢查男性。當我嘗試編輯表單時,它沒有被檢查。 – nais

0

我可能會同意,這是使用Rails形式助手更容易。但是,如果您不想使用它們,則必須提取值。所以,在你models/passengerride.rb我想補充:

def okwithgender_separate 
    okwithgender.split(',') 
end 

,然後在你看來,每個輸入必須有類似:

<input 
    id="okwithgender" 
    type="checkbox" 
    value="Any Gender" 
    name="passengerride[okwithgender][]" 
    <%= 'checked="checked"' if @passengerride.okwithgender_separate.include? 'Any Gender' %> > 

,或者你可以說功能添加到一個控制器助手清理它。

+0

我試過了,但只有第一個框被選中,剩下的選中框在編輯頁面沒有被選中。如果我檢查了女性和其他女性,則僅在編輯頁面中檢查女性。 – nais

相關問題