我正在尝试通过创建操作在连接表中创建多个记录。这是我的协会。
class User
has_many :abilities
has_many :skills, through: :abilities
end
class Job
has_many :abilities
has_many :skills, through: :abilities
end
class Ability
belongs_to :job
belongs_to :skill
end
我有一个表单来创建一个新的Job。有一个选择框可以选择工作所需的技能(技能已经创建)。在jobs_controller.rb的create动作中,如何创建多个异能?这就是我所拥有的。
def create
@job = Job.new(job_params)
@abilities = @job.abilities.build(params[:job][:skills])
end
我的参数返回一个技能数组。
"job"=> {
"name"=>"abc",
"skills"=>["2", "5"]
}
如何在我的jobs_controller的创建操作中创建两个Ability记录(并将gig_id与正在创建的工具相关联)。
答案 0 :(得分:1)
最简单的方法是从表单“skill_ids”发送
"job"=> {
"name"=>"abc",
"skill_ids"=>["", "2", "5"]
}
控制器中的
def create
@job = Job.new(job_params)
# ...
end
def job_params
params.require(:job).permit([:name, skill_ids: []])
end
将自动创建所需的能力
答案 1 :(得分:1)
您可以使用singular_collection_ids
方法:
#app/controllers/jobs_controller.rb
class JobsController < ApplicationController
def new
@job = Job.new
@skills = Skill.all
end
def create
@job = Job.new job_params
@job.save
end
private
def job_params
params.require(:job).permit(skill_ids: [])
end
end
#app/views/jobs/new.html.erb
<%= form_for @job do |f| %>
<%= f.collection_select :skill_ids, @skills, :id, :name %>
<%= f.submit %>
<% end %>
话虽如此,你有一个重大的结构性问题。您需要将User
替换为Skill
:
#app/models/skill.rb
class Skill < ActiveRecord::Base
has_many :abilities
has_many :jobs, through: :abilities
end
#app/models/ability.rb
class Ability < ActiveRecord::Base
belongs_to :job
belongs_to :skill
end
#app/models/job.rb
class Job < ActiveRecord::Base
has_many :abilities
has_many :skills, through: :abilities
end