Evo*_*tio 2 activerecord ruby-on-rails ruby-on-rails-4
我尝试在用户和项目之间建立基本关联:
user.rb
class User < ActiveRecord::Base
has_many :projects, foreign_key: 'owner_id'
has_many :project_members, through: :project_members
end
Run Code Online (Sandbox Code Playgroud)
project.rb
class Project < ActiveRecord::Base
has_many :project_members, dependent: :destroy
has_many :users, through: :project_members
end
Run Code Online (Sandbox Code Playgroud)
project_member.rb
class ProjectMember < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)
我的project_members表:
+----+------------+---------+
| id | project_id | user_id |
+----+------------+---------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
+----+------------+---------+
Run Code Online (Sandbox Code Playgroud)
和我的项目表:
+----+-------+----------+
| id | name | owner_id |
+----+-------+----------+
| 1 | test1 | 1 |
| 2 | test2 | 2 |
+----+-------+----------+
Run Code Online (Sandbox Code Playgroud)
为什么我喜欢
current_user.projects
Run Code Online (Sandbox Code Playgroud)
只有projects.owner_id = current_user.id的项目而不是用户所在的项目?
但我认为这是错误的一面,我试图获得我想要的数据.我在/项目控制器获取数据的项目.我想我应该使用这样的东西:
class ProjectsController < ApplicationController
# GET /projects
def index
@projects = Project.all
end
end
Run Code Online (Sandbox Code Playgroud)
但我怎么只能得到current_user.id所属的项目?
我认为你应该把它设置得有点不同:
class User < ActiveRecord::Base
has_many :owned_projects, class_name: "Project", foreign_key: 'owner_id', dependent: :restrict_with_error
has_many :project_members, dependent: :destroy
has_many :projects, through: :project_members
end
class Project < ActiveRecord::Base
has_many :project_members, dependent: :destroy
has_many :users, through: :project_members
belongs_to :owner, class_name: "User"
end
Run Code Online (Sandbox Code Playgroud)
为了获得所有项目,current_user是你可以做的成员:
current_user.projects
Run Code Online (Sandbox Code Playgroud)
为了获得current_user拥有的所有项目,您可以:
current_user.owned_projects
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |