before_save& before_create标题化麻烦

时间:2012-08-22 16:53:03

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

我正在开发一个rails应用程序,我试图在保存或创建属性之前对其进行标题化。我很确定我已经正确地完成了这个,但是,每当我尝试在我的rails控制台中创建一个新记录时,标题化都没有发生。这是我的型号代码:

class City < ActiveRecord::Base
  attr_accessible :name, :region_id

  belongs_to :region

  before_save :tileize_name
  before_create :tileize_name


  def tileize_name
    self.name.titleize
  end

end

当我在控制台中读取属性时,标题化方法有效。例如:

Region.find(4).name
 => "arizona" 


Region.find(4).name.titleize
 => "Arizona" 

我在这里遗漏了什么吗?

3 个答案:

答案 0 :(得分:6)

您标题名称但不保存名称。

string = "hello"
string.titleize
# => "Hello"
string
# => "hello"

string = string.titleize
# => "Hello"
string
# => "Hello"

您需要将标题化名称指定给您的名称属性。

def tileize_name
  self.name = self.name.titleize
end

答案 1 :(得分:0)

实际添加

Intellisense

;&#34; your_model.rb&#34;会解决这个问题。

所以它看起来像

before_save { self.chefname = chefname.titleize }

还值得一看https://github.com/granth/titleize

答案 2 :(得分:-1)

或者你可以这样做,

before_save { self.name.titleize! }

行李操作员更改并保存该值。那么您将不需要 before_create