Ruby on rails Rails-查找用户的所有项目

Ruby on rails Rails-查找用户的所有项目,ruby-on-rails,ruby,ruby-on-rails-3,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, :

几天前我开始学习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
本身就是一个数组,因此查询无法工作。我知道这个HABTM关系模型只需一行代码就可以实现,但我对Rails的了解仍然很少

我的另一种方法如下所示,但返回一个空白结果:

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

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

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

  • 模型应具有单数形式的名称:
    ProjectUser
    而不是
    ProjectsUsers
  • 如果您不打算在
    ProjectUser
    模型中保存任何其他数据,则最好只使用正常的
    has\u和\u-beliens\u-to\u-many
    关系。换句话说:没有“连接模型”,只有一个名为
    projects\u 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
class用户
或者你这样做:

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
class用户

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

您是否尝试过
u=user.find(会话[:user\u id]);u、 项目
?错误是:未初始化的常量用户::项目错误是:未初始化的常量用户::项目通常模型看起来不错。您是否尝试重新启动服务器并使用rake db:migrate:reset重置数据库?是否尝试重新启动服务器,是否与路由有关?实际上,我完全同意@jesper。听从他的建议。我没注意到你用的名字,但他是对的。下面是railscast,它描述了如何组织多对多关系。这很有效(嘿;)只是想知道当用户保存项目时,我是否需要考虑联接表,因为此时创建它的用户没有返回任何项目。项目控制器
def new
中保存的唯一内容是
@project=project.new
我不完全确定我是否理解您的意思,但是如果您想在创建项目时将其连接到用户,您必须主动这样做。例如:
@project.users