1

私は O'Really による Rails 3 の学習を終えました。今度は、実際のプロジェクトで知識を試すときです。Red Hat の OpenShift プラットフォームにデプロイします。ラップトップのコード プロジェクト フォルダーを検索すると、C++ で一度書いた単純な TODO タスク マネージャーが見つかりました。そのため、今度は Rails の Web タスク管理サービスとしてそのプロジェクトを復活させ、OmniAuth による認証を可能にすることをお勧めします。

元の C++ プロジェクトは、OOP の観点から計画されました。現在の ID 番号、テキスト文字列、日付、時刻を使用して「タスク」オブジェクトを作成できます。タスクのすべての部分は、異なる C++ クラスとして作成されました。いずれも、コンストラクターでの検証が含まれています。次に、タスクを sqlite に保存するか、プレーン テキストとしてエクスポートして、アプリで共有または再度読むことができます。

さて、本題に戻りますが、MVC を使用して、この小さなアプリを Rails のより複雑なものに適応させようとしています。

タスクのテキスト フィールドに入力してコントローラーに渡すフォームを表示するスキャフォールディングを追加することを考えました。コントローラーは現在の日付と時刻を設定し、ID は DB に保存するときにデフォルトで設定されます。モデルで検証を行う必要があります。そのフィールドに基づいてテーブルを構築するための移行を作成します。OmniAuth でマルチユーザー サポートを追加するので (すべてのユーザーが自分のタスクを保存できるようにするため)、ユーザー情報を含む新しい DB テーブルを作成する必要があります。

しかし、ユーザーごとに新しいタスク テーブルを作成し、それらをユーザー テーブルにマッピングする必要がありますか? または、1 つのタスク テーブルを作成し、そこにすべてのユーザーのタスクをドロップして、そこにすべてをマッピングしますか?

ユーザータスクをデータベースに保存することで良いことがわかりません。

何か案は?

前もって感謝します

4

2 に答える 2

1

これは、User は多くのタスクを持つことができるが、Task は 1 人のユーザーにしか属することができないと仮定しています。

1 つのtasksテーブルがあり、そこにすべてのユーザーのタスクを配置します。

テーブルにuser_id列を追加し( )、モデルに以下を追加します。tasksrails g migration add_user_id_to_tasks user_id:integer

class Task < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :tasks
end

リファレンス: ActiveRecord 関連付けに関する Rails ガイド

于 2012-09-06T19:08:22.397 に答える
0

モデルは次のようになります。

class User < ActiveRecord::Base
  has_many :tasks
end
class Task < ActiveRecord::Base
  belongs_to :user
end

テーブルは次のようになります (疑似アドホック表記):

Users table => id:integer, name:String
Tasks table => id:integer, task:Text, user_id:integer

これは役に立ちますか?

于 2012-09-06T19:17:10.407 に答える