我有以下观察员:
class NewsFeedObserver < ActiveRecord::Observer
observe :photo, :comment
def after_create(record)
end
end
我想学习怎么做是在after_create中添加一个SWITCH / IF语句,所以我知道创建了哪个模型
类似的东西:
after_create(record)
switch model_type
case "photo"
do some stuff
case "comment"
do some other stuff
end
或更容易想象:
if record == 'Photo'
如何记录并确定型号名称?
答案 0 :(得分:3)
在评论中,我注意到您发现这可以使用record.class.name
,但这不是非常惯用的Ruby。 Ruby case
语句使用===
进行比较,如果您正确实现它,它将非常适合您。
class NewsFeedObserver < ActiveRecord::Observer
observe :photo, :comment
def after_create(record)
case record
when Photo
# do photo stuff
when Comment
# do comment stuff
else
# do default stuff
end
end
end
这实质上转换为:
if Photo === record
# do photo stuff
elsif Comment === record
# do comment stuff
else
# do default stuff
end
我建议你注意以下几点:
class Sample
end
s = Sample.new
Foo === s # true uses Class#===
s === Foo # false uses Object#===
===
在Class
和Object
答案 1 :(得分:1)
您需要为单独的模型设置单独的观察者
所以对于User =&gt; UserObserver,Photo =&gt; PhotoObserver
您需要告诉rails应用程序使用哪些观察者,您在config / environment.rb中指定
至少这是标准方式。有关详细信息
http://guides.rubyonrails.org/active_record_validations_callbacks.html#observers