无法访问记录中的字段

时间:2010-12-09 20:33:05

标签: ruby-on-rails actionmailer

我正在尝试使用我班级的后缀列,但我一直收到此错误。

  

未定义的方法`后缀'   零:NilClass

message_mailer.rb

class MessageMailer < ActionMailer::Base
  default :from => "noreply@cs.tsu.edu"

  def message_sender(user)
    @user = user
    carrier= user.carrier
    sms=user.telephone +carrier.suffix
    attachments["smalltsulogo.png"] = File.read("#{Rails.root}/public/images/smalltsulogo.png")
    mail(:to => "#{user.login} <#{user.email}>", :subject => "New Message from cs.tsu.edu")
    mail(:to => "#{user.login} <#{sms}>", :subject => "New Message from cs.tsu.edu")
  end
end

CreateCarriers迁移

class CreateCarriers < ActiveRecord::Migration
  def self.up
    create_table :carriers do |t|
      t.string :name
      t.string :suffix

      t.timestamps
    end
  end

  def self.down
    drop_table :carriers
  end
end

将索引添加到运营商

class AddIndexToCarrier < ActiveRecord::Migration
  def self.up
    add_index :carriers, :suffix
  end

  def self.down
    remove_index :carriers, :suffix
  end
end

2 个答案:

答案 0 :(得分:1)

确保user实际上是一个对象。

def message_sender(user)
   if user
       #your code
   else
       puts 'Error: User is nil'
   end
end

答案 1 :(得分:1)

我相信Sam所说的是确保您实际上将用户模型的实例传递到message_sender函数中。扩展Sam的例子:

def message_sender(user)
   if user.class != User
       #your code
   else
       puts 'Error: input is not a User Object'
   end
end

如果传入的用户变量不属于User类,则此代码将打印错误。如果这确实打印了错误消息,这意味着无论您在应用程序中调用message_sender(),问题都可能发生。检查您是否将有效的用户对象传递给message_sender()。所有的功劳归于Sam回答。 (如果我不是新用户,我会对他的帖子发表评论)。