Чтобы упростить вещи, у меня есть 3 таблицы:
лицо
has_many: способности, через =>: статистика
Способность
has_many: люди, через =>: статистика
Статистика
принадлежит_: люди
принадлежит_ к способностям
Статистика имеет дополнительный атрибут под названием «рейтинг».
То, что я хотел бы сделать, - это создать форму редактора, которая всегда перечисляет все способности, имеющиеся в настоящее время в базе данных, и позволяет мне назначать каждому оценку.
Ради жизни я не могу понять, как это сделать. Мне удалось заставить его работать при создании нового пользователя с чем-то вроде этого:
(от контроллера людей)
def new
@character = Character.new
@abilities = Ability.all
@abilities.each do |ability|
@person.stats.build(:ability_id => ability.id )
end
end
From the people form:
<% for @ability in @abilities do %>
<%= fields_for "person[stats_attributes]" do |t| %>
<div class="field">
<%= t.label @ability.name %>
<%= t.hidden_field :ability_id, :value => @ability.id, :index => nil %>
<%= t.text_field :rating, :index => nil %>
</div>
<% end %>
<% end %>
Это успешно дает мне список способностей с полями оценок рядом с ними и позволяет мне сохранять их, если я создаю нового пользователя.
Проблема в том, что если я затем загружаю форму редактирования (используя ту же часть формы), она не возвращает оценки, а если я сохраняю, даже с точно такими же оценками, она создает дублирующиеся записи в Таблица статистики, вместо того, чтобы обновлять ее.
Я понимаю, что я ужасный программист, и, вероятно, я делаю это неправильно, но как мне получить форму редактирования, чтобы вызвать текущие оценки, присвоенные каждой способности для этого пользователя, и, во-вторых, как мне ее получить? обновить рейтинг вместо дублирования, если комбинация личности и способности уже существует?