1

私は初めての Ruby on Rails アプリケーション (そして xhtml と css を超える最初のもの) を構築しようとしています。モデル構造に関する有益なフィードバックを探しています。

アプリケーションの視覚化に役立つモックアップを含めました。

これまでのところ必要だと確信している唯一のモデルは次
のとおりです。 1.映画モデル(メイン モデルとして機能し、movie という名前が付けられているため、URL は "sitename.com/movies/1-Willy-Wonka" のようになります)および
2 .ユーザーモデル

それ以外は、何を作ればいいのかわからない。「ロケ地」、「俳優」、そして最も重要なのは「ウィリー・ウォンカ」や「ジョニー・デップ」などの属性です。

属性も含めて、これらすべてのモデルを作成する必要がありますか? もしそうなら、人々がモデルを属性として作成できるようにすることは可能であり、推奨されますか?

アプリをフォームによって作成され、データベースに保存されたデータと見なそうとしていますが、その pov では、属性 (キャラクター <=> 俳優) を内部のセクション (俳優、撮影場所、アートワークなど) に接続する方法を決定できません。映画のリスト; 属性自体を関連する属性/映画/セクションへのハイパーリンクにすることもできます。「スティーブン スピルバーグ」をクリックすると、彼が出演した映画、彼が監督、製作、執筆した映画などのページに移動します。

考え?

4

6 に答える 6

2

さらなる詳細。上記のモデルの移行は次のようになります。

class CreateMovies < ActiveRecord::Migration
  def self.up
    create_table 'movies' do |t|
      t.string  'title', :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table 'movies' 
  end
end

class CreateActors < ActiveRecord::Migration
  def self.up
    create_table 'actors' do |t|
      t.string  'first_name', 'last_name', :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table 'actors' 
  end
end

以下のフィールドmovie_idactor_idフィールドbelongs_toは、上記のロールモデルの関連付けに対応しており、ロールテーブルが俳優と映画を結合できるようにする外部キーです。私がそれをモデル化することを提案したように、それcharacter_nameはこの関係の特性であり、したがって役割の属性です。character_nameでNULLを許可するかどうかはあなたの呼び出しです。私はNULLに嫌気がさしていますが、この場合、俳優が特定の映画に出演しているが、キャラクターを知らない、または気にしないという事実を実際に保存したいという議論をすることができるので、それを許可しました名前。

class CreateRoles < ActiveRecord::Migration
  def self.up
    create_table 'roles' do |t|
      t.integer 'movie_id', 'actor_id', :null => false
      t.string 'character_name'
      t.timestamps
    end
  end

  def self.down
    drop_table 'roles' 
  end
end
于 2009-01-13T18:42:44.890 に答える
2

データベースの正規化について読む価値があるかもしれません: http://en.wikipedia.org/wiki/Database_normalization

于 2009-01-14T00:32:29.193 に答える
2

モデル Movie、Actor、FilmLocation、および Character から始めます。映画と俳優は多対多の関係にあります (映画には多くの俳優がいて、俳優は多くの映画に出演しています)。FileLocation と Movie も多対多です。Character(Willy Wonka) と Actor も多対多です。

于 2009-01-13T17:55:00.820 に答える
2

Web 開発に関してこれが初めての場合は、映画を一覧表示し、それらを追加、編集、および削除できる単純な Web アプリを作成することから始めることをお勧めします。タイトル、あらすじ、そしておそらく映画のポスター/DVD カバーの URL を保存するだけです。次に、アクターを追加してムービーに関連付けます。

「IMDB のような」サイトの作成は簡単なプロジェクトではありません。俳優と映画を関連付けるだけでなく、非常に複雑な関係を築くことになります。俳優には映画の役割があります。そして、それよりもさらに抽象的になりたいと思うかもしれません。ある人物が映画の中で仕事を持っていると言って、ディレクター、プロデューサー、キー グリップ、キャスティング ディレクターなどを追跡することもできます。

データ モデルに取り組むだけでなく、サイトを構成するものと、それらの機能を作成する順序 (必要に応じて) について計画を立て、その最終目標に到達するための小さなステップを踏む必要があります。

于 2009-01-13T17:55:47.667 に答える
2

最初にデータモデルを明確にすることをお勧めします。その後、データベース テーブルごとに 1 つの Rails モデルから開始できます。これは常に当てはまるわけではありませんが、開始するのに妥当な場所です。

映画と俳優に焦点を当てましょう。

いくつかの仮定:

  • 映画は他のエンティティと多対多の関係を持つことができます
  • 俳優と映画の関係の一部としてキャラクター情報を保存したい

次に、次のように関係をモデル化できます。

# movies.rb
class Movie < ActiveRecord::Base
  has_many :roles
  has_many :actors, :through => :roles
end

# actor.rb
class Actor < ActiveRecord::Base
  has_many :roles
  has_many :movies, :through => :roles
end

通常、結合モデルを自分で作成しなくても、Rails の魔法に頼って結合モデルを処理できます。今回は結合モデルの属性として文字情報を格納したいので、明示的に作成します。

# role.rb
class Role < ActiveRecord::Base
  belongs_to :movie
  belongs_to :actor
end
于 2009-01-13T17:44:56.207 に答える
1

一般的に、はい。モデルをできるだけ細かくするのが好きです。これにより、アプリケーションに精通していない人にとっては非常に明確になり、コードの再利用が容易になります。

複雑なアプリケーションを作成する前に、 ActiveRecordの関連付けをしっかりと把握しておくと便利です。すべての関連付けと、それらがSQLテーブルに関して実際に生成するものを心から知っていることを確認してください。魔法のように見えることもありますが、魔法は必ずしも良いことではありません。その背後にあるものを知っているなら、物事はうまくいきます。

また、実験中にすべてを廃棄して最初からやり直すことを恐れないでください。Rubyなので、元の場所に戻るのにそれほど時間はかかりません。

于 2009-01-13T18:05:36.260 に答える