我正在构建一个带有表格(对虾和对虾-表格)的PDF,其中特定章节的所有教育目标(EO)都与其用例(UC)一起显示。我直接得到了EO,但不知道如何让UC进入单元格。这是我的代码。也许有人比我更有想法,或者知道如何做得更好。提前感谢!
class UseCase < ApplicationRecord
has_and_belongs_to_many :educational_objectives
end
class EducationalObjective < ApplicationRecord
has_and_belongs_to_many :use_cases
endapp/pdfs/章节_pdf.rb
require 'prawn'
class ChapterPdf < Prawn::Document
def initialize(eo, chapter)
@educational_objectives = eo
@chapter = chapter
@subject_id = @chapter.subject_id
chapter_header
chapter_text
items
end
...
def items
table_data = []
@educational_objectives.map do |item|
table_data << [item.position, item.educational_objective, use_cases(item.id)]
end
...
end
def use_cases(id)
ucs = @educational_objectives.joins(:use_cases).
where(educational_objectives: {id: id}).
select(:use_case)
ucs.join do |uc|
uc
end
end
end当我查看服务器日志时,我看到以下内容:
SELECT "use_case" FROM "educational_objectives" INNER JOIN "educational_objectives_use_cases" ON "educational_objectives_use_cases"."educational_objective_id" = "educational_objectives"."id" INNER JOIN "use_cases" ON "use_cases"."id" = "educational_objectives_use_cases"."use_case_id" WHERE "educational_objectives"."chapter_id" = ? AND "educational_objectives"."id" = ? [["chapter_id", 9], ["id", 169]]
SELECT 1 AS one FROM "educational_objectives" INNER JOIN "educational_objectives_use_cases" ON "educational_objectives_use_cases"."educational_objective_id" = "educational_objectives"."id" INNER JOIN "use_cases" ON "use_cases"."id" = "educational_objectives_use_cases"."use_case_id" WHERE "educational_objectives"."chapter_id" = ? AND "educational_objectives"."id" = ? LIMIT ? [["chapter_id", 9], ["id", 171], ["LIMIT", 1]]在我的PDF中,我看到了单元格
#<EducationalObjective:0x00007f8569997370>#<EducationalObjecti
ve:0x00007f85699971e0>#<EducationalObjective:0x00007f85699970
50>我的错误在哪里?然后我想用逗号分隔显示它...是的,我是一个新手,非常感谢你的帮助!
发布于 2018-03-29 19:49:07
has_and_belongs_to_many关联提供了a number of helper methods -对于您的情况,您将能够调用educational_objective.use_cases来返回相关记录的集合。
这意味着您可以删除use_cases方法,并使用类似于以下内容的内容:
table_data = @educational_objectives.map do |item|
[item.position, item.educational_objective, item.use_cases]
end由于您使用的是map,因此不需要使用在此之外定义的数组。
这假设上例中的item是EducationalObjective的一个实例,尽管我对此有点困惑,因为您也在调用item.educational_objective。
如果这对你有什么帮助或者你有任何问题,请告诉我。
https://stackoverflow.com/questions/49554063
复制相似问题