Rails - 查找用户的所有项目

2 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

项目模型

class Project < ActiveRecord::Base
    has_many :projects_users
    has_many :users, :through => :projects_users
    attr_accessible :date_created, :id, :name
end
Run Code Online (Sandbox Code Playgroud)

Project_User模型

class ProjectsUsers < ActiveRecord::Base
    belongs_to :project
    belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

我到目前为止的尝试是:

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

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

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

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

Jes*_*per 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
Run Code Online (Sandbox Code Playgroud)

或者你这样做:

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
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都可以这样做:user.projectsproject.users