Ruby on rails Rails-查找用户的所有项目
几天前我开始学习Rails,但对Ruby也没有太多经验。考虑到下面的关系,我现在的问题是试图找到某个用户的所有项目 用户模型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, :
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