我几天前开始学习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]})"
答案 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.projects
和project.users
答案 1 :(得分:1)
您只需致电@user.projects
即可获取与用户相关联的所有项目。