我使用的是rails 4.1.5和ruby 2.1.2。
我有两个型号:
event
和record
非常标准的关联:event has_many records
和record belongs_to event
。
event
和record
都有状态机。我正在使用state_machine
gem(https://github.com/pluginaweek/state_machine)
我正试图找出一种方法,当event
被取消时,它会更新所有关联的records
并将其设置为取消。
我通过控制器实现了这一点,但我尝试订阅瘦视图,愚蠢的控制器,胖模型方法,我试图确保没有任何东西滑过裂缝......
以下是我event
模型的摘录:
state_machine :initial => :open do
# event to handle cancelling
# This is a final state
event :cancel do
transition :open => :cancelled
self.records.each do |record|
record.cancel
end
end
end
显然还有很多其他过渡等等,但为了简单起见,我将其浓缩了......
我从Rails得到的错误是:
undefined method `records' for #<StateMachine::Event:0x007f58bada9750>
所以我假设当我放self.records.each
它正在制作自我=状态机?
无论如何不使用观察员来解决这个问题?
任何帮助表示赞赏!谢谢!
答案 0 :(得分:0)
为了解决这个问题,我最终使用了Observers。
要执行此操作,您需要先将以下内容放入Gemfile
:
gem 'rails-observers'
然后到您的config/application.rb
文件:
config.active_record.observers = :event_observer
在这种情况下,'event'是我的模型的名称。
然后在app/models/event_observer.rb
我添加了:
class EventObserver < ActiveModel::Observer
# Callback for :cancel event after the transition is performed
def after_cancel(event, transition)
# Cancel each record associated to this event.
event.records.each do |record|
record.cancel
end
end
end
希望这有助于某人。