我的问题根本不应该复杂,但我无法弄清楚为什么它不起作用。我已经寻找了很多天的答案并尝试了很多东西,但问题仍然存在,所以如果我重复问题我会道歉。在我的应用程序中,我有3个模型User,Course&分类
class Category < ActiveRecord::Base
has_many :courses, inverse_of: :category
end
class Course < ActiveRecord::Base
belongs_to :user
belongs_to :category, inverse_of: :courses
accepts_nested_attributes_for :category
end
用户模型has_many:courses
这是课程和类别的架构:
create_table "categories", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "courses", force: true do |t|
t.string "title"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "user_id"
t.integer "category_id"
t.string "address"
t.boolean "domicile"
t.decimal "lat"
t.decimal "lng"
t.string "city"
end
add_index "courses", ["category_id"], name: "index_courses_on_category_id"
add_index "courses", ["user_id"], name: "index_courses_on_user_id"
在我的课程表单中,我可以看到类别列表,我可以选择一个,但是当我创建新课程时,没有为课程分配category_id。我使用simple_form,这是类别输入:
<%= f.association :category, value_method: :id, include_blank: false %>
在我的课程控制器中有这样的:
def create
@course = Course.new(course_params)
@course.user = current_user
respond_to do |format|
if @course.save
format.html { redirect_to @course, notice: 'Course was successfully created.' }
format.json { render :show, status: :created, location: @course }
else
format.html { render :new }
format.json { render json: @course.errors, status: :unprocessable_entity }
end
end
end
而且:
def course_params
params.require(:course).permit(:title, :description, :user_id, :city, :address, :lat, :lng, category_attributes: [:id, :name])
end
答案 0 :(得分:1)
我认为您的课程模型中不需要accepts_nested_attributes_for :category
,因为它属于一个类别。
在您的控制器中,您的course_params
不允许category_id
参数,因此新课程未设置类别。您的course_params
应为:
params.require(:course).permit(:title, :description, :user_id, :city, :address, :lat, :lng, :category_id)
在您的表单中,<%= f.association :category, value_method: :id, include_blank: false %>
可以替换为(以显示类别名称):
<%= f.association :category, label_method: :name, value_method: :id, include_blank: false %>