我正在关注此代码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
添加了模型代码答案 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