未定义的局部变量或方法

时间:2013-07-27 14:40:23

标签: ruby-on-rails ruby-on-rails-3

我正在关注此代码https://stackoverflow.com/a/17886089/692622,这是我的client.rb模型文件和client_controller.rb文件

# app/models/client.rb
before_create :add_unsubscribe_hash

private

def add_unsubscribe_hash
    self.unsubscribe_hash = SecureRandom.hex
end

# app/controllers/clients_controller.rb
def unsubscribe
    client = Client.find_by_unsubscribe_hash(params[:unsubscribe_hash])
    client.update_attribute(:subscription, false)
end

但是当我尝试通过/ clients / new添加客户端时(我在控制器文件中也有7个方法),我收到错误

undefined local variable or method `add_unsubscribe_hash'

在create method

中保存客户端时出现错误
respond_to do |format|
  if @client.save

任何想法都有什么不对,因为一切看起来都不错

编辑 - 我已在pastebin http://pastebin.com/jkegLsaE

添加了模型代码

1 个答案:

答案 0 :(得分:2)

请注意,在your Pastebin的第40行,您已经打开了一个foreach循环,在第42行终止,但不会。相反,foreach循环包含整个add_unsubscribe_hash函数声明,因此:before_create回调无法调用它。

通过在应该关闭的函数中结束循环来解决这个问题(并确保删除文件末尾的无关end标记):

# app/models/contact.rb
def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
        Contact.create! row.to_hash
    end
end