0

Привет Я пытаюсь реализовать функцию, используя вложенные атрибуты. В форме создания гандикапа (для Клиента) я хотел бы отобразить список всех лиг Клиента, и когда форма будет отправлена ​​в действие «Создать», я бы использовал @ handicap.save, и это создаст связь между гандикапом и Лиги (лиги, которые были выбраны в форме).Rails вложенные атрибуты для многих из многих

Единственное, что я нашел, было без использования вложенных атрибутов. В новом методе я бы получил все недостатки от клиента и отобразил их в форме. Поэтому, когда форма будет отправлена ​​в действие create, я сделал бы проверки. Создайте запись @handicap для Customer, а затем вручную для каждого Идентификатора Лиги, который приходит из формы, которую я бы создал ассоциации.

#New/Create actions in the handicaps controller 

def new 
    @leagues = @customer.leagues 
end 

def create 
    handicap = @customer.handicaps.build(handicap_params) 
    if handicap.save 
    associations = [] 
    params[:league_ids].each do |id| 
     associations << LeagueHandicap.new(handicap_id: @handicap.id, league_id: id) 
    end 
    LeagueHandicap.import(associations) 
    end 
end 

Я хотел бы сделать гандикап. Создать и автоматически создать ассоциации LeagueHandicap. Однако я не знаю, как это сделать с вложенными атрибутами. Это можно сделать так?

У меня есть следующие модели:

class Customer < ActiveRecord::Base 
    has_many :handicaps, dependent: :destroy 
    has_many :leagues, dependent: :destroy 
end 

class Handicap < ActiveRecord::Base 
    belongs_to :customer 
    has_many :league_handicaps 
    has_many :leagues, through: :league_handicaps, dependent: :destroy 
end 

class LeagueHandicap < ActiveRecord::Base 
    belongs_to :handicap 
    belongs_to :league 
end 

class League < ActiveRecord::Base 
    has_many :league_handicaps 
    has_many :handicaps, through: :league_handicaps, dependent: :destroy 
end 

(многие ко многим отношений между расстройствам и Лиги через LeagueHandicap)

ответ

0

Если позволяют league_ids рельсы должны добавить их для вас. Вам нужно указать рельсы, это массив, но

def handicap_params 
    params.require(:handicap).permit(league_ids: []) 
end 
+0

И как я могу отобразить клиента @leagues в форме. Поэтому, когда форма является подателем, у меня будет следующее: {гандикап: {info_about handicap: {}, league_ids: [1, 2, 3]}}. Мне трудно отображать лиги коварно в представлении. Мне нужно использовать sumthing как: f.fields для: leagues do | builder | ? –

+0

Что-то вроде ['collection_check_boxes'] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_check_boxes)' f.collection_check_boxes (league_ids, League.all,: id,: name) ' –

+0

Отлично! Но мы не можем использовать тот же метод для правильного редактирования? Если мы используем collection_check_boxes, даже если мы изменим проверки в методе обновления, rails не удалит последнюю связь и не создаст новую. Есть ли способ сказать рельсы, чтобы сделать это, так что нам не нужно жестко кодировать его? –

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

  • Нет связанных вопросов^_^