Я пытаюсь сделать что-то простое, но по какой-то причине это не работает и не возвращает никаких ошибок.
У меня есть модель User и модель ManualBill.
Счет за ручную принадлежит пользователю (я могу выбрать, кто заплатил, когда я его создаю, и он принадлежит этому пользователю).Но затем, после того, как будет создан Ручной счет, я также хочу иметь возможность добавлять «manual_bills_payers», которые являются теми, кто не оплатил счет, но должен вернуть его.В конце концов, это заставляет мои модели выглядеть так:
class ManualBill < ApplicationRecord
belongs_to :flat
belongs_to :user
has_many :manual_bill_payers
has_many :users, through: :manual_bill_payers
end
И
class ManualBillPayer < ApplicationRecord
belongs_to :manual_bill
belongs_to :user
end
Я создал форму обновления для ManualBill, в которой я собираюсь выбрать несколькопользователи (которые собираются быть manual_bill_payers) с флажками (я в цикле, поэтому я назвал manual_bill «счет» здесь.
<%= simple_form_for [@flat, bill] do |f| %>
<%= f.error_notification %>
<%= f.association :manual_bill_payers, as: :check_boxes,
:label_method =>
lambda { |owner| "#{owner.email}" },collection: User.all,
input_html: {class: "input-
bar-settings"} %>
<%= f.submit 'Add payers', class: "btn-form" %>
<% end %>
Я действительно не понимаю, что делать здесь.Я хочу сделать, в основном, СОЗДАТЬ несколько новых manual_bill_payers при обновлении manual_bill, выбрав пользователей, которые находятся в моей квартире (все пользователи БД в приведенном выше примере). Я также хочу иметь возможность удалить их, сняв флажки.
Я в основном пробовал все ... от изменения моделей до установки "has_and_belongs_to_many" вместо "сквозной" связи до изменения: manual_bill_payers на: users в simple_form.
Большинствовремя обновления (без ошибок и перенаправления на страницу показа), но я все еще получаю пустой массив, когда я делаю ManualBillPayer.all или когда я проверяюk my manual_bill.manual_bill_payers.
Мой метод обновления здесь на всякий случай
def update
@manual_bill = ManualBill.find(params[:id])
authorize @manual_bill
if @manual_bill.update(manual_bill_params)
redirect_to flatshare_path(@manual_bill.flat)
else
redirect_to root_path
end
end
def manual_bill_params
params.require(:manual_bill).permit(:manual_bill_payer_id)
end
У меня нет никакого метода create в этом контроллере, потому что manual_bill создается где-то еще, поэтомупоследний метод довольно пустой
Где я не прав?Есть ли что-то, что я полностью понимаю?
Я поставил повышение в обновлении, чтобы проверить параметры
{"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"280izDKna4QWfr0OhZJW6u/
UWcqlxo56yR17fBDX4QFKhNG94mYqbBLPuq+ifo3mNIV10GFk1RK7Hr5AnmosOA==",
"manual_bill"=>{"manual_bill_payer_ids"=>["", "1", "35", "34"]},
"commit"=>"Add payers",
"flatshare_id"=>"15",
"id"=>"15"}
Большое спасибо