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)
该错误可能是由于您没有遵循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.projects和project.users
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |