2016-01-25 2 views
3

Я пытаюсь создать несколько записей в моей таблице соединений посредством действия create. Вот мои ассоциации.Rails Создать несколько записей в таблице соединений

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 

У меня есть форму для создания нового задания. Существует поле выбора для выбора того, какие навыки необходимы для работы (навыки уже созданы). В создании действия jobs_controller.rb, как мне создать несколько способностей? Вот что у меня есть.

def create 
    @job = Job.new(job_params) 
    @abilities = @job.abilities.build(params[:job][:skills]) 
end 

Мои параметры возвращают массив навыков.

"job"=> { 
    "name"=>"abc", 
    "skills"=>["2", "5"] 
} 

Застрять о том, как создать две способности записи в создании действия моего jobs_controller (и ассоциирования gig_id на концерт создается).

+0

Где ваша модель навык? Имеются ли навыки и способности одинаковы? Если нет, то зачем вам нужны умения и навыки (какова их роль)? –

+0

Это ассоциация многих-ко-многим. – leejay100

ответ

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 
+0

Фантастический, все. Спасибо, Rich. – leejay100

+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 

необходимых способности будут создаваться автоматически

Смежные вопросы