find_by on unsaved many to many association

时间:2015-02-19 06:34:37

标签: ruby-on-rails ruby-on-rails-4 nested-forms nested-attributes

我有一个模型付款,它有许多PaymentItems,其中每个付款项目与一个项目相关联。

class Payment < ActiveRecord::Base
  has_many :payment_items, inverse_of: :payment
  has_many :items, through: :payment_items

  accepts_nested_attributes_for :payment_items, reject_if: ->(payment_item_attributes) { payment_item_attributes['item_id'].blank? }
  ...
end

class PaymentItem < ActiveRecord::Base
  belongs_to :tab_item, inverse_of: :payment_item
  belongs_to :payment, inverse_of: :payment_items

  ... validations ...
end

在我的付款表单中,我在迭代可用商品时为每个PaymentItem使用了fields_for方法。

= form_for @payment do |f|
  - @tab_items.each do |item|
    = f.fields_for :payment_items, @payment.payment_items.find_or_initialize_by(item_id: item.id) do |payment_item_form|
      %label
        = payment_item_form.check_box :item_id, item.id, nil
        = item.name

还有更多的嵌套用于收集有关验证的payment_item的更多信息,但如果验证失败,则find_or_initialize_by方法无法按item_id查找项目。

我的问题是:在案例验证失败的情况下,find_by是否可以在未使用的嵌套模型上工作?我现在的工作是做类似的事情:

@payment.payment_items.select {|i| i.tab_item_id == item.id } || @payment.payment_items.new(tab_item: item)

但感觉笨重。

感谢您的帮助。

0 个答案:

没有答案