gpt4 book ai didi

ruby-on-rails - rails 3 : Should I explicitly save an object in an after_create callback?

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:27 26 4
gpt4 key购买 nike

相关编码:http://pastebin.com/EnLJUJ8G

class Task < ActiveRecord::Base
after_create :check_room_schedule

...

scope :for_date, lambda { |date| where(day: date) }
scope :for_room, lambda { |room| where(room: room) }

scope :room_stats, lambda { |room| where(room: room) }
scope :gear_stats, lambda { |gear| where(gear: gear) }

def check_room_schedule
@tasks = Task.for_date(self.day).for_room(self.room).list_in_asc_order
@self_position = @tasks.index(self)

if @tasks.length <= 2
if @self_position == 0
self.notes = "There is another meeting in
this room beginning at # {@tasks[1].begin.strftime("%I:%M%P")}."
self.save
end
end
end

private

def self.list_in_asc_order
order('begin asc')
end
end

我正在制作一个小型任务应用程序。每个任务都分配到一个房间。添加任务后,我想使用回调来检查同一房间中在我刚添加的任务之前和之后是否有任务(尽管我的代码现在只处理一种边缘情况)。

所以我决定使用 after_create(因为用户在编辑它时会手动检查它,因此不是 after_save)所以我可以使用两个范围和一个类方法来查询当天、房间里的任务,以及按时间订购。然后我在数组中找到对象并开始使用 if 语句。

我必须明确地保存对象。有用。但我这样做感觉很奇怪。我不太有经验(第一个应用程序),所以我不确定这是不受欢迎的还是惯例。我搜索了一堆并浏览了一本引用书,但我没有看到任何具体的内容。

谢谢。

最佳答案

对我来说,这看起来像是 before_create 的任务。如果您必须在 after_* 回调中保存,您可能打算改用 before_* 回调。

before_create 中,您不必调用 save,因为保存是在回调代码为您运行之后发生的。

与其保存然后查询是否返回 2 个或更多对象,不如在保存之前查询一个会发生冲突的对象。

在伪代码中,你现在拥有的是:

after creation
now that I'm saved, find all tasks in my room and at my time
did I find more than one?
Am I the first one?
yes: add note about another task, then save again
no: everything is fine, no need to re-save any edits

你应该拥有的:

before creation
is there at least 1 task in this room at the same time?
yes: add note about another task
no: everything is fine, allow saving without modification

更像是这样的:

before_create :check_room_schedule
def check_room_schedule
conflicting_task = Task.for_date(self.day)
.for_room(self.room)
.where(begin: self.begin) # unsure what logic you need here...
.first
if conflicting_task
self.notes =
"There is another meeting in this room beginning at #{conflicting_task.begin.strftime("%I:%M%P")}."
end
end

关于ruby-on-rails - rails 3 : Should I explicitly save an object in an after_create callback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571414/

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