传入对象时找不到Rails模型方法中的感叹号

时间:2013-10-07 02:27:28

标签: ruby-on-rails

使用Rails 3.2。邮件操作我有以下内容:

# shop.rb
class Shop < ActiveRecord::Base 
  def deliver_update_notification!(user)
    version = self.versions(user).last
    EditorMailer.updated_spot(self, version).deliver
  end
end

# shops_controller.rb
class ShopsController < ApplicationController
  def update
    @shop = Shop.find(params[:id])
    if @shop.update_attributes(params[:shop])
      @shop.deliver_update_notification!(current_user)
      redirect_to shop_path(@shop)
    else
      render 'edit'
    end
  end
end

不知何故,当我将current_user对象传递给方法deliver_update_notification!时,它会抛出错误,指出无法找到该方法。如果将方法更改为不接受任何对象,则该方法有效。为什么这样做?

另外,我不记得为什么我在方法中有感叹号。从某个地方看到它。感叹号的目的是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

感叹号应该表示该方法是“危险的”并编辑调用它的对象的值。不知道如何定义爆炸方法,但你总是不能使用'!'并使其成为一种危险的方法。