0

我有三个表:用户、任务和用户任务(其中用户和任务作为外键,没有其他列)。对于特定的用户/任务组合,用户任务表中的条目可能存在也可能不存在(出于可伸缩性原因,根据需要创建用户任务记录)。

在我看来,我想显示当前登录用户的所有任务。对于每个任务,如果 UserTask 表中存在相应的记录,我想显示文本“是”;否则我想显示“否”。但是我有点不确定我应该从控制器传递哪些对象到视图,以及一旦将它们传递给视图我应该如何与对象交互(即我可以做什么)。

我应该将用户、任务和用户任务作为单独的变量从控制器传递到视图吗?这样,我可以通过简单地遍历 Tasks 变量来显示所有任务,并且对于每个任务,我可以where在视图中使用(ActiveRecord 查询)来确定每个任务是否有一个 UserTask。问题是,是否可以将对象wherefind查询传递到视图中?我一直认为你把它留给控制器,只在视图中做简单的事情,比如迭代传递给视图的对象(如果这是错误的,请纠正我)。

或者我应该在控制器中构建一个哈希,其中每个键都是一个任务,每个值都是一个用户任务,然后将该哈希传递给视图?这样,我可以通过简单地遍历所有键来显示视图中的所有任务,并且对于每个任务键,我可以通过检查值是否为空来显示“是”或“否”。

还是有另一种方法(即加入表格或其他东西......不确定它是如何工作的)?

4

1 回答 1

0

首先,您应该真正阅读 Rails 中的关联:

http://guides.rubyonrails.org/association_basics.html

您打算在用户和任务之间建立关系的方式让我觉得有点奇怪,但抛开这一点,按照您的描述实现它,您将在您的User,TaskUserTask模型上定义关联:

class User < ActiveRecord::Base
  has_many :user_tasks
end

class Task < ActiveRecord::Base
  has_one :user_task
end

class UserTask < ActiveRecord::Base
  belongs_to :user
  belongs_to :task
end

在您的控制器中:

@user = User.includes(:user_tasks).find(...)
@tasks = Task.all

然后,在您看来(在 haml 中):

-@tasks.each do |task|
  =(@user.user_tasks.include?(task)) ? "yes" : "no"

编辑:根据评论中的解释更新。

于 2012-07-30T02:34:34.553 回答