如何从 has_many 关系中累积结果?
How to accumulate results from has_many relationship?
我想从选定的 projects
中获取所有 boards
的列表,只需一行代码:
boards = projects.boards
怎么做?
目前我在每个项目上单独迭代,获取它的板并在数组中累积结果(代码如下)
class Project < ActiveRecord::Base
has_many :boards
end
class Board < ActiveRecord::Base
belongs_to :project
end
class Account < ActiveRecord::Base
has_many :projects
end
projects = @account.projects.where("SOME_CONDITION")
# my current code:
boards = []
projects.each do |project|
boards << project.boards
end
# wanted code:
boards = projects.boards # <--- How to achieve it?
使用此语法
项目=@account.projects.where("SOME_CONDITION").last.boards
您可以使用 includes
AR 语句来获取与每个项目相关的所有看板
Project.a_scope.includes(:boards).each do |project|
projects.boards.do_something
end
将使用两个 SQL 查询获取与您想要的项目相关的所有板。
select * from projects where ...
select * from boards where boards.project_id in (1,2,3,4...)
如果您只想要一个看板列表,您可以自己完成
project_ids = Project.a_scope.pluck(:id)
boards = Board.where(id: project_ids)
如果我没记错的话,你想要一个帐户的项目的看板。您需要向模型中添加更多行。
1.
class Project < ActiveRecord::Base
has_many :boards
belongs_to :account
end
2.
class Board < ActiveRecord::Base
belongs_to :project
belongs_to :account, through: project
end
3.
class Account < ActiveRecord::Base
has_many :projects
has_many :boards, through: :projects
def projects_boards(project_ids)
self.boards.where(boards.project_id: project_ids)
end
end
然后就这样称呼它:
boards= @account.boards
根据您的需要编辑电话:
boards = @account.projects_boards(projects.map(&:id))
class Project < ActiveRecord::Base
has_many :boards
end
class Board < ActiveRecord::Base
belongs_to :project
end
class Account < ActiveRecord::Base
has_many :projects
has_many :boards, through: :projects
end
随便说说
SOME_CONDITION = "projects.state = 'active'"
只需使用这个:
@account.boards.where(SOME_CONDITION)
我想从选定的 projects
中获取所有 boards
的列表,只需一行代码:
boards = projects.boards
怎么做?
目前我在每个项目上单独迭代,获取它的板并在数组中累积结果(代码如下)
class Project < ActiveRecord::Base
has_many :boards
end
class Board < ActiveRecord::Base
belongs_to :project
end
class Account < ActiveRecord::Base
has_many :projects
end
projects = @account.projects.where("SOME_CONDITION")
# my current code:
boards = []
projects.each do |project|
boards << project.boards
end
# wanted code:
boards = projects.boards # <--- How to achieve it?
使用此语法
项目=@account.projects.where("SOME_CONDITION").last.boards
您可以使用 includes
AR 语句来获取与每个项目相关的所有看板
Project.a_scope.includes(:boards).each do |project|
projects.boards.do_something
end
将使用两个 SQL 查询获取与您想要的项目相关的所有板。
select * from projects where ...
select * from boards where boards.project_id in (1,2,3,4...)
如果您只想要一个看板列表,您可以自己完成
project_ids = Project.a_scope.pluck(:id)
boards = Board.where(id: project_ids)
如果我没记错的话,你想要一个帐户的项目的看板。您需要向模型中添加更多行。
1.
class Project < ActiveRecord::Base
has_many :boards
belongs_to :account
end
2.
class Board < ActiveRecord::Base
belongs_to :project
belongs_to :account, through: project
end
3.
class Account < ActiveRecord::Base
has_many :projects
has_many :boards, through: :projects
def projects_boards(project_ids)
self.boards.where(boards.project_id: project_ids)
end
end
然后就这样称呼它:
boards= @account.boards
根据您的需要编辑电话:
boards = @account.projects_boards(projects.map(&:id))
class Project < ActiveRecord::Base
has_many :boards
end
class Board < ActiveRecord::Base
belongs_to :project
end
class Account < ActiveRecord::Base
has_many :projects
has_many :boards, through: :projects
end
随便说说
SOME_CONDITION = "projects.state = 'active'"
只需使用这个:
@account.boards.where(SOME_CONDITION)