我想创建包含许多必修课程的任务模型。但是,当我创建任务时,下拉菜单没有附加任何课程。 (如Task.first.courses中的返回nil,而course_id属性也为nil)。
任务控制器:
before_action :authenticate_company!, only: [:create, :destroy]
def create
@courses = Course.all
@task = current_company.tasks.build(task_params)
if @task.save
flash[:success] = "Task created!"
redirect_to @task
else
render 'new'
end
end
def new
@courses = Course.all
@task = Task.new
end
private
def task_params
params.require(:task).permit(:name, :description, files: [])
end
课程模式:
belongs_to :task, optional: true
任务模型:
has_many :courses
Add_task_id_to_courses迁移:
def change
add_column :courses, :task_id, :integer
end
Add_course_id_to_tasks迁移:
def change
add_column :tasks, :course_id, :integer
end
Tasks / new.html.erb:
<%= form_for(@task) do |f| %>
<div class="field">
<%= f.text_area :name, placeholder: "Task Name" %>
</div>
<div class="field">
<%= f.text_area :description, placeholder: "Add Description" %>
</div>
<div class="field">
<%= f.file_field :files, multiple: true %>
</div>
<div class="field">
<%= f.collection_select :course_ids, @courses, :id, :name, {include_blank: true}, {multiple: true} %>
</div>
<%= f.submit "Post", class: "btn btn-primary" %>
<% end %>
答案 0 :(得分:0)
课程belongs_to :task
,任务has_many :courses
。这意味着您在课程表中只需要task_id
。从任务表中删除course_id
。 course_ids
是一种方法,generated来自has_many
关联,不是列名。
但这不是问题的原因。您忘记将course_ids
添加到允许的参数中。
def task_params
params.require(:task).permit(:name, :description, files: [], course_ids: [])
end
当出现问题时,请不要忘记检查服务器日志。现在您应该看到类似Unpermitted parameters: course_ids