0

プロジェクトにはユーザーがいます。ユーザーには費用がかかります。

現在サインインしているユーザーが新しい経費を追加するための画面があります。コントローラーはcurrent_userに基づいてユーザーキーを強制します。

ここで、ユーザーが特定のプロジェクト内で作業できるようにし、そのプロジェクトの経費を一度に入力できるようにする必要があります。基本的には、プロジェクト経費画面に「入力」して、プロジェクトによってその画面に表示される経費の範囲を制限します。選択されました。

(basecampで作業中のプロジェクトを選択する方法と同様です)

このビューを他の用途にも使用したいので、できるだけドライにしたいです。

ユーザーにプロジェクトを選択させ、既存の経費画面を使用してその選択を維持するための適切な方法は何でしょうか。

編集-プロジェクトを選択して、経費ページのすべての機能がそのプロジェクトをコントローラーメソッドに渡すことができるようにしたいと思います。

だから私は/project/ 45/expenses...などで終わる可能性があります

ありがとう!

class Project < ActiveRecord::Base
  attr_accessible :name, :active

    has_many :expenses, foreign_key: :project_id

end

class Expense < ActiveRecord::Base
  attr_accessible :amount, :expense_date, :project_id, :expense_type_id, :user_id

  belongs_to :project
    belongs_to :user
    belongs_to :expense_type
    has_one :expense_approval

end

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me

  has_many :expenses, foreign_key: :user_id
end
4

1 に答える 1

1

あなたはやや複雑な関係のセットを持っています。次に、アプリで必要となるクエリセマンティクスについて考える必要があります。

元の投稿の件名を覚えていますか?「ネスト...必要ですか?」

これは、アプリに必要なさまざまなクエリセマンティクスによって異なります。

最も明白な「ネストされた」関係は次のとおりです。

class Project < ActiveRecord::Base
  attr_accessible :name, :active
  has_many :expenses, foreign_key: :project_id
end

したがって、アプリでプロジェクトに属する経費を照会することだけが理にかなっている場合は、ネストされたルートを作成することを検討してください。

config / routers.rb:

resources :project do
  resources :expense
end

それがアプリ内の唯一のルートであると想定します。経費を参照する唯一の方法は、それが属するプロジェクトを通じてそれを行うことです。したがって、このクエリは利用可能になります。

GET /project/101/expenses # index all expenses for project with id 101

しかし、routes.rbの上記のエントリで生成される多数のルートを見てください。確認するには、上記のネストされたルートを「routes.rb」に含めて「rakeroutes」を実行してから、上記のエントリを「routes.rb」から削除して「rakeroutes」を再度実行します。

ネストされたルートは、ALOTのルートを追加します。それはあなたが必要としない多くのルートを追加するかもしれません。その場合は、別のアプローチをとることができます。ネストされたルートを使用しないでください。代わりに、本当に必要なルートのみを作成してください。

于 2012-11-06T02:48:27.907 に答える