2

几天前我开始学习 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

项目_用户模型

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]})"
4

2 回答 2

9

该错误可能是由于您没有遵循 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

于 2012-10-27T07:33:43.047 回答
1

You can simply call @user.projects to get all projects associated with a user.

于 2012-10-27T07:11:00.857 回答