轨道上的红宝石 - 为什么我收到无方法错误



我在控制器中调用此方法:

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 告诉我该方法未定义?

如果你将此方法定义为instance方法,那么你需要像这样调用它:

a = YourModelName.new
a.delete_heard_timeline_event(your_parameters)

如果此方法class则调用:

YourModelName.delete_heard_timeline_event(your_parameters)

我看到已经有被接受的答案,但要回答你的问题:

如果由于这一行而弹出此 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 方法尝试在其参数中触发方法,但仅在非 nil 对象上触发,因此您可以使用错误的参数安全地调用它。

然后只是:

TimelineEvent.delete_heard_event(current_user.id, @showable_video.user.id, @showable_video.video.id)

问候, NoICE

相关内容

  • 没有找到相关文章

最新更新