RoR很新。不知道有没有人可以帮我解决这个问题。
我有一个名为“business_time”的宝石,用于计算两个日期之间的营业日。我在模型中设置了一个完成所有计算的方法。
我有一个名为“credit”的字段,该字段应该包含工作日的数量。这就是我所拥有的:
MODEL
def self.calculate(from_date,to_date)
days = 0
date_1 = Date.parse(from_date)
date 2 = Date.parse(to_date)
days = date_1.business_days_until(date2)
days
end
CONTROLLER
def new
@vacation = current_user.vacations.build
@vacations = Vacation.calculate(:from_date, :to_date)
end
我引用了一个关于字符串的错误。
此外,如何将方法中的数据存储到名为“credit”的字段中?
谢谢你们。
答案 0 :(得分:1)
您需要的是传递String
个对象而不是Symbol
个对象。
因此,您可能需要传递@vacations = Vacation.calculate(:from_date, :to_date)
和params[:from_date]
而不是params[:to_date]
,而不是20/01/2016
,而不是@vacations = Vacation.calculate(params[:from_date], params[:to_date])
。
您的代码应为
=Lookup(Fields!Postcode.Value,Fields!ID.Value,Fields!Name.Value,<b>"DataSet1"</b>)
答案 1 :(得分:1)
我认为不需要额外的方法,因为所有属性(from_date
,end_date
和credit
)都存储在同一个模型中。
我只需在初始化程序中设置from_date
和end_date
,然后在验证前使用回调计算credit
:
# in the model
before_validation :calculate_credit
private
def calculate_credit
if from_date && to_date
# `+ 1` because the user takes off both days (`from_date` and `to_date`),
# but `business_days_until` doesn't count the `from_day`.
self.credit = from_date.business_days_until(to_date) + 1
end
end
# in the controller
def new
@vacation = current_user.vacations.build
end
def create
@vacation = current_user.vacations.build(vacation_params)
if @vacation.save
# @vacation.credit would return the calculated credit at this point
else
# ...
end
end
private
def vacation_params
params.require(:vacation).permit(:from_date, :to_date)
end