0

Rails Guidesを読んでいるときに、よくわからないことがありました。この例では、一意性のチェックに向けてオプションを追加するスコープオプションを記述できることを示しています。私の質問は、特定の期間に対して具体的にクエリを実行するメソッドを作成する必要があるかどうかです。言い換えれば、以下の例で目にするよりも多くのコードが必要ですか?そうでない場合、Railsはテーブルデータベースの正しいタイムスタンプ列をチェックする方法をどのように知っていますか?

class Holiday < ActiveRecord::Base
   validates :name, 
             :uniqueness => { :scope => :year,
             :message => "should happen once per year" }
end
4

2 に答える 2

1

これは、Holidayモデルにyearフィールドがある場合(つまり、holidaysテーブルにyear列がある場合)に機能します。次に、ARは、名前の一意性を同じレコードに制限するだけです。year

于 2012-10-28T23:47:36.147 に答える
1

yearこれはすべて、モデルの列のコンテキストで一意性を確保することです。その列は何でもかまいませんが、存在する必要があります。タイムスタンプの年の部分を完全な日付で自動的にチェックすることはありません。モデルは実際にyear値を保存する責任があります。

もちろん、これをyear自動的に設定することもできます。holiday_dateモデルに列があるとしましょう。次に、year列が常に次のように設定されていることを確認できます。

before_save :set_year

def set_year
  self.year = holiday_date.try(:year)
end

(メソッドは、エラーが発生した場合にエラーが発生しtryないことを保証するだけです)holiday_datenil

于 2012-10-28T23:47:56.997 に答える