1

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

コンソールで属性を読み取ると、titleize メソッドが機能します。例えば:

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


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

ここで何か不足していますか?

4

3 に答える 3

7

名前にタイトルを付けていますが、保存していません。

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

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

タイトル付きの名前をname属性に割り当てる必要があります。

def tileize_name
  self.name = self.name.titleize
end
于 2012-08-22T16:57:43.513 に答える
0

実際に追加

before_save { self.chefname = chefname.titleize }

「your_model.rb」でこの問題を解決します。

だからそれは次のようになります

class Chef < ActiveRecord::Base
  before_save { self.chefname = chefname.titleize }
end

また、https://github.com/granth/titleizeもご覧ください。

于 2015-10-07T01:53:17.603 に答える
-1

または、これを行うことができます。

before_save { self.name.titleize! }

バッグ演算子は、値を変更して保存します。その後、 before_createは必要ありません。

于 2012-08-22T18:09:28.693 に答える