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

因此,如果在您的应用程序中,查询属于项目的费用才有意义,您可能会考虑创建嵌套路由,即:

配置/路由.rb:

resources :project do
  resources :expense
end

假设这是您的应用程序中的唯一路线。引用任何费用的唯一方法是通过它所属的项目进行。所以这个查询将可用:

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

但是,请查看在 routes.rb 中使用上述条目生成的 NUMEROUS 路由。要查看,请使用 'routes.rb' 中包含的上述嵌套路由运行 'rake routes',然后从 'routes.rb' 中删除上述条目并再次运行 'rake routes'。

嵌套路由添加了很多路由。它可能会添加许多您不需要的路线。如果是这种情况,您可能需要采取不同的方法。不要使用嵌套路线,而是仅手工制作您真正需要的路线。

于 2012-11-06T02:48:27.907 回答