使用check_box_tag请求参数不保存在与n:n关系的model_params上

时间:2018-01-26 20:11:22

标签: ruby-on-rails ruby parameters request many-to-many

我正在使用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]和其他解决方案但没有成功。

如何将类别保存到课程中?

1 个答案:

答案 0 :(得分:0)

尝试以下

使用category_ids: []

更改强参数
def course_params
    params.require(:course).permit(:studio_id, :name, :description, category_ids: [])
end

注释掉这一行@categories = params[:category_ids]

希望有所帮助