我在控制器中调用此方法:
delete_heard_timeline_event(current_user.id, @showable_video.user.id, @showable_video.video.id)
我在我的模型中确定了它:
def delete_heard_timeline_event(actor_id, subject_id, secondary_subject_id)
TimelineEvent.find_by_actor_id_and_subject_id_and_secondary_subject_id_and_event_type(actor_id, subject_id, secondary_subject_id, 'heard_event').destroy
end
为什么rails告诉我该方法未定义?
答案 0 :(得分:1)
如果您将此方法定义为instance
方法,则需要像这样调用它:
a = YourModelName.new
a.delete_heard_timeline_event(your_parameters)
如果此方法为class
方法,请致电:
YourModelName.delete_heard_timeline_event(your_parameters)
答案 1 :(得分:0)
我看到已经接受了答案,但要回答你的问题:
如果因为这行而弹出NoMethodError:
find_by_actor_id_and_subject_id_and_secondary_subject_id_and_event_type
我认为Rails可以处理最多3个条件,你有4个条件。
因为你在Rails 3中,你可以这样做:
class TimelineEvent
def self.delete_heard_event(actor_id, subject_id, sec_id)
self.scoped.where(:actor_id => actor_id,
:subject_id => subject_id,
:secondary_subject_id => sec_id,
:event_type => 'heard_event').first.try(:destroy)
end
end
最后的.try方法尝试在其参数中触发一个方法,但只在非零对象上触发,因此可以安全地用错误的参数调用它。
然后只是:
TimelineEvent.delete_heard_event(current_user.id, @showable_video.user.id, @showable_video.video.id)
问候,NoICE