我想要动态预定义我的一些模型属性。我有各种模型。现在我希望我的 Bill 模型使用其他模型实例创建对象。
模型:
leave.rb # belongs_to :residents
resident.rb # has_many:leaves,has_many:bills,has_one:account
bill.rb # belongs_to:residents
rate_card.rb # belongs_to:hostel
account.rb # belongs_to:resident
hostel.rb
现在这是我的账单 Controller 创建方法:
def create
@bill = Resident.all.each { |resident| resident.bills.create(?) }
if @bill.save
flash[:success]="Bills successfully generated"
else
flash[:danger]="Something went wrong please try again !"
end
end
我想使用所有模型构建账单例如:
resident.bills.create(is_date:using form,to_date:using form,expiry_date:using form,amount:30*(resident.rate_card.diet)+resident.rate_card.charge1+resident.rate_card.charge2)+(resident.account.leaves)*10+resident.account.fine)
///////Is this possible ?
如何在这里使用强参数?
请帮帮我,thxx..
最佳答案
如果你想在 create、update 上calculated 属性,我认为你想要的这种逻辑的 Rails 方法是使用 callbacks
或 delete,表示依赖于其他模型的属性。例如:
class Bill < ActiveRecord::Base
...
before_create :set_amount
...
protected
def set_amount
self.amount = 30 * self.resident.rate_card.diet + self.resident.rate_card.charge1 + self.resident.rate_card.charge2 + (self.resident.account.leaves) * 10 + self.resident.account.fine
end
end
如果您希望在更新记录时也使用此逻辑,那么您应该使用 before_save
而不是 before_create
。
执行此操作后,您应该接受 Bill 模型的常用参数(strong),如:
def bill_params
params.require(:bill).permit(:is_date, :to_date, :expiry_date)
end
所以你的 create
调用应该是这样的:
resident.bills.create(bill_params)
此外,请注意您的create
action,您应该在Bill
或Resident< 上创建一个方法
使用交易同时创建所有账单的模型,因为您可能希望创建每个账单或不创建账单。这样,您的 BillsController
中就不会有 Resident.all.each
逻辑。
关于ruby-on-rails - 如何在 Rails 中传递动态参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751276/