与collection_check_boxes的多对多关联形式导致验证错误

时间:2017-05-05 11:16:01

标签: ruby-on-rails activerecord

我有三种模式:课程,类别和分类。

# 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

课程控制者有以下参数:

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 %>

但是当我点击提交时,我收到验证错误:

  

分类无效

我不确定为什么会这样?

1 个答案:

答案 0 :(得分:1)

由于presence: true操作,您无法保存与数据库中的分类相关的任何实体。首先,我认为最好通过:category_id验证schema.rb中的category_id null: false。其次,您确定需要分类模型吗?我的建议是考虑将categorizationable.rb文件放在yourApp/app/models/concerns文件夹中,之后使用现有模型中的功能。您可以详细了解问题here。当您的模型需要重构时,这种技术非常强大。