1

最近、作業中のプロジェクトのコメント モデルに新しい「送信済み」属性を追加しました。移行では、次のような列を作成しましたadd_column :comments, :submitted, :boolean注:データベースには MySQL を使用しています。

この属性のデフォルト値を にしたかったので、次のようなメソッドfalseを追加しました。before_create

before_create :default_values

def default_values
  self.submitted = false
end

これは私には正しいように思えましたが、新しいコメントを追加しようとすると、何も起こらず、コンソールにエラーが表示されました。私の create メソッドは AJAX 経由で行われ、コントローラーは JS によってメソッドを正しく処理しましたが、何らかの理由でデフォルトformat htmlで別のページにリダイレクトしようとしていました。

少し遊んだ後、default_valuesメソッドを次のように変更しました。

def default_values
  self.submitted = 0
end

その後、すべてがうまくいきました。これは、Railstinyintがデータベースのブール フィールドに使用することと関係がありますか? false/true と 1/0 の間の変換を行うのに十分スマートだと思っていたでしょう。

興味深いことに、コンソールから新しいコメントを作成しようとしたところ、問題なくsubmitted属性をに設定できfalseました。true/false 値の代わりに整数を使用しなければならない理由はありますか?

4

2 に答える 2

4

ブール値についてはスマートです。次を使用してください。

object.submitted?

アクセス方法として…

于 2012-09-19T18:34:07.877 に答える
2

移行にデフォルト値を追加します。

add_column :comments, :submitted, :boolean, :default => false
于 2012-09-19T17:54:03.557 に答える