使用复选框和简单表单创建和更新

时间:2018-09-25 08:39:37

标签: ruby-on-rails associations simple-form

我正在尝试做一些基本的事情,但是由于某些原因却无法正常工作,并且没有返回任何错误。

我有一个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"}

非常感谢

0 个答案:

没有答案