下拉菜单未选择型号

时间:2019-05-31 08:53:33

标签: ruby-on-rails ruby

我想创建包含许多必修课程的任务模型。但是,当我创建任务时,下拉菜单没有附加任何课程。 (如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 %>

1 个答案:

答案 0 :(得分:0)

课程belongs_to :task,任务has_many :courses。这意味着您在课程表中只需要task_id。从任务表中删除course_idcourse_ids是一种方法,generated来自has_many关联,不是列名。

但这不是问题的原因。您忘记将course_ids添加到允许的参数中。

def task_params
  params.require(:task).permit(:name, :description, files: [], course_ids: [])
end

当出现问题时,请不要忘记检查服务器日志。现在您应该看到类似Unpermitted parameters: course_ids

的内容