【发布时间】:2013-02-14 12:51:56
【问题描述】:
在我的应用程序中,我有一个页面可以呈现数据库中的所有项目。我想要的是能够过滤结果,例如只显示用户是成员的一次。
以下来自我的项目控制器,我想在其中执行此操作(仅显示用户是成员的项目)。要做的是首先从找到 user_id 的“ProjectUser”中获取所有项目。然后我想使用这个数组从表“项目”中检索所有相关项目,并使用@user_is_member.project_id。
这不起作用,因为它只给我一个项目,而不是全部。
如何更改代码以完成我想要的?
代码:
@user_is_member = ProjectsUser.where(:user_id => current_user.id)
@user_is_member.each do |member|
@projects = Project.where(:id => member.project_id)
end
表格:
projects_users:
project_id
user_id
项目:
id
...non relevant fields...
型号:
用户模型:
class User < ActiveRecord::Base
has_many :project_users
has_and_belongs_to_many :projects
end
项目模型:
class Project < ActiveRecord::Base
has_and_belongs_to_many :users # => , :class_name => 'User'
belongs_to :user
end
ProjectUser 模型:
class ProjectsUser < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
注意: current_user 是当前登录的用户(可以访问所有用户字段,例如“id”)
【问题讨论】:
-
current_user 是什么?是登录用户吗?
-
@gabrielhilal:是的。
-
您的模型中是否设置了关联?如果您可以在此处添加模型代码,那就太好了。在您当前的情况下,您可以创建一个项目 ID 数组,
projects = []和@user_is_member.each {|p| projects << p.project_id}然后@projects = Project.where(:id => projects)。但如果你有正确的联想,那么你不应该走这条路。 -
您的用户模型中存在不明确的关联。
-
@SybariteManoj 是对的...另外,projectuser 属于用户,但用户没有定义
has_many projectusers...
标签: ruby-on-rails database ruby-on-rails-3 relational-database