我有Accounts
模型,其中包含许多CreditCards
并且有一个BillingInfo
。
在CreditCards
控制器中,我在CollectionProxy
:
class CreditCardsController < ApplicationController
def create
credit_card = current_account.credit_cards.new(credit_card_params)
...
end
end
但是,这不适用于has_one
关联:
class BillingInfosController < ApplicationController
def create
billing_info = current_account.billing_info.new(billing_info_params)
...
end
end
原因是;在billing_info
上调用current_account
确实会返回nil
而不是空CollectionProxy
,这会导致在new
上发送nil
并与NoMethodError
一起存在
有没有办法使用CollectionProxy
或类似的东西继续使用
current_account.billing_info.new(billing_info_params)
而不是
BillingInfo.new(billing_info_params.merge(account_id: current_account.id))
初始化?提前谢谢!
答案 0 :(得分:1)
您应该可以使用current_account.build_billing_info
或current_account.create_billing_info
这些是has_one
关联添加的方法。
初始化新的
has_one
或belongs_to
关联时,必须使用build_
前缀来构建关联,而不是association.build
方法用于{has_many
1}}或has_and_belongs_to_many
个关联。要创建一个,请使用create_
前缀。
有关这些方法的更多信息以及活动记录为您添加的其他方法,请参阅has_one association reference。
答案 1 :(得分:0)
一个解决方案是确保每个帐户has_one billing_info
您可以使用vector<string> foo { sregex_token_iterator(cbegin(text), cend(text), re, 1), sregex_token_iterator() }
回调来创建帐户的billing_info
另一个是先获取billing_info
after_create