我有三种模式:课程,类别和分类。
# 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 %>
但是当我点击提交时,我收到验证错误:
分类无效
我不确定为什么会这样?
答案 0 :(得分:1)
由于presence: true
操作,您无法保存与数据库中的分类相关的任何实体。首先,我认为最好通过:category_id
验证schema.rb
中的category_id null: false
。其次,您确定需要分类模型吗?我的建议是考虑将categorizationable.rb
文件放在yourApp/app/models/concerns
文件夹中,之后使用现有模型中的功能。您可以详细了解问题here。当您的模型需要重构时,这种技术非常强大。