我正在使用Rails 5.1
并且我在n:n
关系中保存了一些问题。
我有三种模式:
class Course < ApplicationRecord
belongs_to :studio
has_many :reviews, dependent: :destroy
has_many :has_category
has_many :categories, through: :has_category
validates :name, presence: true
end
class Category < ApplicationRecord
has_many :has_category
has_many :courses, through: :has_category
end
class HasCategory < ApplicationRecord
belongs_to :category
belongs_to :course
end
以及使用check_box_tag创建具有不同类别的新课程的简单表单(不确定是否正确使用它)
<%= simple_form_for [@studio, @course] do |f| %>
<%= f.input :name %>
<%= f.input :description %>
<% @categories.each do |category| %>
<%= check_box_tag "course[category_ids][]", category.id, true %>
<%= category.name%>
<% end %>
<%= f.button :submit %>
<% end %>
所有这些都是在课程控制器上允许和创建的:
def new
@studio = Studio.find(params[:studio_id])
@course = Course.new
@course.studio = @studio
@categories = Category.all
end
def create
@studio = Studio.find(params[:studio_id])
@course = Course.new(course_params)
@course.studio = @studio
@categories = params[:category_ids]
if @course.save
redirect_to course_path(@course)
else
render :new
end
end
def course_params
params.require(:course).permit(:studio_id, :name, :description, :category_ids)
end
使用better_errors我知道正在请求类别,这里是请求信息:
"course"=>{"name"=>"Course test", "description"=>"testing", "category_ids"=>["2", "3"]}, "commit"=>"Create Course", "controller"=>"courses", "action"=>"create", "studio_id"=>"16"}
但类别未保存在course_params,HasCategory实例或课程中,我尝试使用@ course.categories = params [:category_ids]和其他解决方案但没有成功。
如何将类别保存到课程中?
答案 0 :(得分:0)
尝试以下
使用category_ids: []
def course_params
params.require(:course).permit(:studio_id, :name, :description, category_ids: [])
end
注释掉这一行@categories = params[:category_ids]
希望有所帮助