Ruby on Rails"未初始化的常量"错误

时间:2015-04-25 19:05:24

标签: ruby-on-rails ruby

我正在创建一个用引号跟踪客户的应用程序。客户有很多报价,一个属于一个客户。我试图使用一个结合名字和姓氏字段的方法来产生一个全名。我的代码如下。

客户模式:

class Customer < ActiveRecord::Base
  has_many :quotes
  def full_name
    "#{FName} #{LName}"
  end
end

引用form.html.erb

<div class="field">
  <%= f.label :Customer_Name %><br>
  <%= collection_select :Quote, :Customer_id, Customer.all, :id, :full_name, {}, {:multiple => true} %>
  </div>

当我尝试创建一个新记录时,我会得到一个&#34;未初始化的常量Customer :: FName&#34;错误。有人可以建议吗?

1 个答案:

答案 0 :(得分:1)

在Ruby中,任何以大写字母开头的标识符都是常量。

irb(main):001:0> FOO = 'bar'
=> "bar"
irb(main):002:0> FOO = 'baz'
(irb):2: warning: already initialized constant FOO
(irb):1: warning: previous definition of FOO was here
=> "baz"
irb(main):003:0> 

因此,作为常量的类名是用camelcase(GhostWriter)编写的,属性和方法通常用snake_case编写。

实际常量全部用大写写成。

所以要把它们放在一起

class Square # the class name Square is a constant
  SIDES = 4 # a constant

  attr_accessor :height 
  attr_accessor :width
  attr_accessor :background_color # attributes are written in snakecase

  def area 
    @height * width
  end

  def get_point # so are method names.
  end 
end