2017-05-05 72 views
0

我有三種模型:課程,類別和分類。多對多關聯形式與collection_check_boxes導致驗證錯誤

# course.rb 
class Course < ApplicationRecord 
    has_many :categorisations, foreign_key: "course_id", dependent: :destroy 
    has_many :categories, through: :categorisations 
end 

#category.rb 
class Category < ApplicationRecord 
    has_many :categorisations, foreign_key: "category_id", dependent: :destroy 
    has_many :courses, through: :categorisations 
end 

# categorisation.rb 
class Categorisation < ApplicationRecord 
    belongs_to :course 
    belongs_to :category 

    validates :course_id, presence: true 
    validates :category_id, presence: true 
end 

場控制器具有以下PARAMS:

def course_params 
    params.require(:course).permit(:name, :prerequisite, :description, 
           :user_id, :category_ids => []) 
end 

我試圖通過建立課程形式的關聯關係:

<%= form_for @course do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.label :prerequisite %> 
    <%= f.text_field :prerequisite, class: 'form-control' %> 

    <%= f.label :description %> 
    <%= f.text_area :description, class: 'form-control' %> 

    <%= f.label :category_ids, "Category" %> 
    <%= f.collection_check_boxes :category_ids, Category.all, :id, :name, 
         {}, { multiple: true, class: 'form-control'} %> 

    <%= f.submit "Create a new course", class: "btn btn-primary" %> 
<% end %> 

然而,當我點擊提交,我得到驗證錯誤:

Categorisations is invalid

我不確定這是爲什麼?

回答

1

拆卸:course_id存在驗證將解決這個問題

class Categorisation < ApplicationRecord 
    belongs_to :course 
    belongs_to :category 

    # validates :course_id, presence: true 
    validates :category_id, presence: true 
end 

問題:

課程不通過關聯保存,但由於當你當然導軌副類別首先嚐試保存categorisation但course_id尚不可用

這就是存在驗證失敗的原因course_id

解決方案

卸下驗證僅僅是一個替代方法的實際解決方案將是有趣的東西

NOTE: Even I am facing the similar issue a few days back. we have removed validation for now. I will be interested in any better solution

1

你不能保存,涉及到分類中,因爲presence: true數據庫的任何實體行動。首先,我認爲:category_idschema.rbcategory_id null: false驗證是個好主意。其次,你確定你需要分類模型嗎?我的建議是考慮將categorizationable.rb文件放入您的yourApp/app/models/concerns文件夾中,然後在現有模型中使用其功能。你可以閱讀更多關於here的問題。當你的模型需要重構時,這種技術非常強大。