我正在尝试做一些基本的事情,但是由于某些原因却无法正常工作,并且没有返回任何错误。
我有一个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时创建几个新的manual_bill_payers。我还希望能够通过取消选中框来删除它们。
我基本上已经尝试了所有方法...从更改模型以将“ has_and_belongs_to_many”(而不是“ through”关联)放置到将:manual_bill_payers更改为simple_form中的:user。
大多数时候更新都通过了(没有错误,将我重定向到显示页面),但是当我执行ManualBillPayer.all或检查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"}
非常感谢