Rails - 查找用户的所有项目

时间:2012-10-27 06:56:51

标签: ruby-on-rails ruby ruby-on-rails-3

我几天前开始学习Rails,也没有太多Ruby经验。我现在的问题是试图找到某个用户的所有项目,给出以下关系。

用户模型

class User < ActiveRecord::Base
    has_many :projects_users
    has_many :projects, :through => :projects_users
    attr_accessible :email, :firstname, :id, :lastname, :password, :username, :password
    has_secure_password
end

项目模型

class Project < ActiveRecord::Base
    has_many :projects_users
    has_many :users, :through => :projects_users
    attr_accessible :date_created, :id, :name
end

Project_User模型

class ProjectsUsers < ActiveRecord::Base
    belongs_to :project
    belongs_to :user
end

到目前为止,我的尝试是:

@projectuserid = ProjectsUsers.find(:all, :conditions => "user_id=#{session[:user_id]}")
@projects = Project.all(@projectuserid)

但似乎@projectuserid本身就是一个数组,所以查询不起作用。我知道这可以通过一行代码实现这个HABTM关系模型,但我对Rails知之甚少。

我的另一种方法看起来像这样,但是返回了一个空白的结果:

@projects = Project.find :all,
         :conditions => "id in (select distinct project_id from projects_users where user_id=#{session[:user_id]})"

2 个答案:

答案 0 :(得分:8)

错误可能是由于您没有遵循Rails的命名约定。

  • 模型应具有单数形式的名称:ProjectUser而不是ProjectsUsers
  • 如果您不打算在ProjectUser模型中保存任何其他数据,那么最好只使用正常的has_and_belongs_to_many关系。换句话说:没有“连接模型”,只是一个名为projects_users的连接表。

所以要么你这样做:

class User < ActiveRecord::Base
    has_and_belongs_to_many :projects
end

class Project < ActiveRecord::Base
    has_and_belongs_to_many :users
end

或者你这样做:

class User < ActiveRecord::Base
    has_many :project_users
    has_many :projects, through: :project_users
end

class Project < ActiveRecord::Base
    has_many :project_users
    has_many :users, through: :project_users
end

class ProjectUser < ActiveRecord::Base
    belongs_to :user
    belongs_to :project
end

在这两种情况下,您都可以执行此操作:user.projectsproject.users

答案 1 :(得分:1)

您只需致电@user.projects即可获取与用户相关联的所有项目。