1

Railsで「type」列を持つProjectモデルを作成しようとしていますが、typeを文字列として明示的にプロジェクトテーブルに格納する必要があるのか​​、それとも代わりにtype_idを格納する必要があります。問題は、タイプモデルを作成するのはばかげているように感じることです。タイプを作成または破棄することはできません。タイプの数は固定されています。しかし、モデルを作成しない場合、他に考えられる唯一の方法は、get_name(type_id)メソッドを持つ/ libにTypeクラスを作成することであり、これは完全にやり過ぎのようです。

文字列だけを格納することにした場合、不要なスペースを使用することになり、タイプによるフィルタリングがおかしくなります。

何かご意見は?

4

1 に答える 1

1

タイプが固定セットであることが確実な場合は、Projectモデルに数値定数を定義し、これらの数値をテーブルの列に格納することができますprojects

ここでは、rjzが言ったように問題を引き起こす名前category_idを使用しないように列を呼び出す例(もちろんテストされていません):type

class Project < ActiveRecord::Base
  # Project categories are constants
  CHEAP_PROJECT = 1
  SOUND_PROJECT = 2
  GRAPHIC_PROJECT = 3
  SECRET_PROJECT = 4

  # Force project_category_id to be a valid category identifier
  validates :category_id, :inclusion => {:in => 1..4}

  # At this point you can use the constants
  # Here an example of a scope to get the secret projects
  scope :secret_projects, where(:category_id => SECRET_PROJECT)
end

category_id値が定義した値であることを必ず検証してください。これらのコンスタンスを取得したら、のようなものを使用して他の場所から使用することもできますProject::SOUND_PROJECT

解決策はかなり明確だと思いますが、要件が変更された場合(常に変更されます...)、モデルを作成し、これらの識別子を維持しながらこれらのプロジェクトカテゴリを挿入する必要があります。

于 2012-05-26T23:42:42.847 に答える