gpt4 book ai didi

ruby-on-rails - 如何覆盖 Rails 模型的 "new"方法

转载 作者:行者123 更新时间:2023-12-04 04:44:42 26 4
gpt4 key购买 nike

在我的 rails 应用程序中,我有一个带有 start_date 和 end_date 的模型。如果用户选择 2010 年 1 月 1 日作为开始日期,选择 2010 年 1 月 5 日作为结束日期,我希望创建模型的 5 个实例(选择的每一天一个)。所以它看起来像

Jan 1, 2010
Jan 2, 2010
Jan 3, 2010
Jan 4, 2010
Jan 5, 2010

我知道处理这个问题的一种方法是在 Controller 中做一个循环。就像是...
# ...inside controller
start_date.upto(end_date) { my_model.new(params[:my_model]) }

但是,我想保持我的 Controller 瘦,而且我想将模型逻辑保留在它之外。我猜我需要覆盖模型中的"new"方法。做到这一点的最佳方法是什么?

最佳答案

正如@brad 所说,您绝对不想覆盖初始化。尽管您可以覆盖 after_initialize,但这看起来并不像您在这里想要的那样。相反,您可能希望像@Pasta 建议的那样向类添加工厂方法。因此,将其添加到您的模型中:

def self.build_for_range(start_date, end_date, attributes={})
start_date.upto(end_date).map { new(attributes) }
end

然后将其添加到您的 Controller 中:
models = MyModel.build_for_range(start_date, end_date, params[:my_model])
if models.all?(:valid?)
models.each(&:save)
# redirect the user somewhere ...
end

关于ruby-on-rails - 如何覆盖 Rails 模型的 "new"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com