2016-01-11 56 views
0

我有一個表格,基本上顯示覆選框使用collection_check_boxes ...我也有我認爲是正確的東西里面的控制器期待的形式,但我得到我還沒有看到整天Ruby on Rails X預計,得到字符串

這裏奇怪的錯誤是我的_form.html.erb:

<%= form_for @report, :html => {class: "form-horizontal"} do |f| %> 
    <% if @report.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@report.errors.count, "error") %> prohibited this report from being saved:</h2> 

     <ul> 
     <% @report.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="form-group"> 
    <%= f.label :phases, class: "col-sm-3 control-label" %> 
    <div class="col-sm-5"> 
     <%= f.collection_check_boxes :phases, Phase.all, :id, :name %> 
    </div> 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-default btn-xs" data-dismiss="modal">Close</button> 
    <%= f.submit nil, class: "btn btn-primary btn-xs" %> 
    </div> 
<% end %> 

控制器有本作的PARAMS:

params.require(:report).permit(:phases => []) 

這是我得到的錯誤當s ubmitting形式:

階段(#70354525541300)預期,得到了字符串(#5990260)

任何想法,我做錯了什麼嗎?

+0

我通過刪除模型關聯來解決問題,但實際上需要關聯嗎?我只是簡單地想要一個帶有複選框的表單,並讓它們根據數據庫的內容自動檢查(當我編輯或查看錶單時)。 Idk爲什麼這看起來很難。 – LewlSauce

回答

0

如果您有:
<%= f.collection_check_boxes :phases, Phase.all, :id, :name %>

嘗試改變:階段:phase_ids:
<%= f.collection_check_boxes :phase_ids, Phase.all, :id, :name %>

並基於控制器,變化:
params.require(:report).permit(:phases => [])
到:
params.require(:report).permit(:phase_ids => [])

我沒有對此做過測試,但就我所知,這應該起作用。

+0

將相位更改爲phase_ids時發生此錯誤:未定義的方法'phase_ids'爲# LewlSauce

2

是實際需要的關聯嗎?

lol。


你,因爲你通過了string的Rails時所期待的object得到了你的錯誤。使用以下命令:如果你想填充has_and_belongs_to_many協會(這是我想你有)

<%= f.collection_check_boxes :phase_ids, Phase.all, :id, :name %> 

params.require(:report).permit(phase_ids: []) 

,你要使用collection_singular_ids屬性。這將接受你從你的HTML表單發送鍵(在下面說明):

-

你所做的是這個相當於什麼:

#app/models/report.rb 
class Report < ActiveRecord::Base 
    has_and_belongs_to_many :phases 
end 

params: { 
    report : { 
     "phases": ["3", "5", "6"] 
    } 
} 

的「階段」聯想是指將填入ActiveRecord::Associations::CollectionProxy(IE ActiveRecord將從phases數據庫中提取關聯的對象)。

當您使用collection_check_boxes時,您只有發送您希望選取的對象的主鍵。在你的參數中看看你自己。因此,當你通過你的控制器直接允許參數時,Rails將會遇到需要Phase對象的問題。

解決的辦法是填充phase_ids屬性,如上述鏈接中所述。