Привет Я пытаюсь реализовать функцию, используя вложенные атрибуты. В форме создания гандикапа (для Клиента) я хотел бы отобразить список всех лиг Клиента, и когда форма будет отправлена в действие «Создать», я бы использовал @ 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)
И как я могу отобразить клиента @leagues в форме. Поэтому, когда форма является подателем, у меня будет следующее: {гандикап: {info_about handicap: {}, league_ids: [1, 2, 3]}}. Мне трудно отображать лиги коварно в представлении. Мне нужно использовать sumthing как: f.fields для: leagues do | builder | ? –
Что-то вроде ['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) ' –
Отлично! Но мы не можем использовать тот же метод для правильного редактирования? Если мы используем collection_check_boxes, даже если мы изменим проверки в методе обновления, rails не удалит последнюю связь и не создаст новую. Есть ли способ сказать рельсы, чтобы сделать это, так что нам не нужно жестко кодировать его? –