Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-复杂模型/关联_Ruby On Rails_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Rails-复杂模型/关联

Ruby on rails Rails-复杂模型/关联,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,在我为学习rails而开发的应用程序(rails 5)中,我尝试实现以下最终结果: 我希望用户能够标记PDF的内容(附加到注释记录或文档记录)。PDF附加到的注释或文档已按文档类型(例如PO、交货通知等)分类后。添加标记时,标记与预定义的标记类型列表相关联(分别将文档注释的文档类型与标记类型的文档类型相匹配)。添加标记时,我希望捕获标记的内容(例如PO编号或订购方名称)以及PDF中的坐标 问题的第一部分 2对象(类/模型)注释和文档与对象(类/模型)标记具有1对多关系(类似于订单到订单的项目):

在我为学习rails而开发的应用程序(rails 5)中,我尝试实现以下最终结果:

我希望用户能够标记PDF的内容(附加到注释记录或文档记录)。PDF附加到的注释或文档已按文档类型(例如PO、交货通知等)分类后。添加标记时,标记与预定义的标记类型列表相关联(分别将文档注释的文档类型与标记类型的文档类型相匹配)。添加标记时,我希望捕获标记的内容(例如PO编号或订购方名称)以及PDF中的坐标

问题的第一部分 2对象(类/模型)注释和文档与对象(类/模型)标记具有1对多关系(类似于订单到订单的项目):

模型标记与模型标记类型具有1对1的关系:

belongs_to :annotation, :document
但是,一个标签记录只能属于一个注释/文档,并且在删除相应的注释/文档时需要删除(为此,我设置了
dependent::destroy

那么,TagType的标记使用哪种类型的关联呢<代码>有一个
有很多
<代码>是否属于

问题的第二部分: 现在,在向注释或文档添加标记时,标记将显示提取的文本、坐标和需要分配给标记类型的标记。但是,某些标记类型(对于批注或文档的文档类型)只能对批注/文档使用一次-取决于标记类型字段“多次出现”是否为false。如何/在何处在关联中设置此(验证/筛选)

如何根据标记的位置(动态)减少列表

欢迎所有建议/指示

第一部分: 对于标记和标记类型(TagType)模型之间的关联,可以在一个模型中使用“属于”,在另一个模型中使用“具有”。例如,标记模型可以有
属于\u to:Tag\u type,inverse\u of::Tag
,而标记类型模型可以有
拥有\u one:Tag,inverse\u of::Tag\u type
。哪个模型使用“所属”和“有一个”关联将取决于外键的位置。例如,如果tags表有一个tag\u type\u id列,上面的代码将起作用(具有“归属于”关联的模型应该包含另一个表的id;请看下面的答案:)

第二部分:
我假设TagType模型和注释或文档之间没有直接关联,标记和注释/文档模型之间以及标记和TagType模型之间存在关联。同样,验证应该在包含标记和注释/文档之间关联的外键的模型中进行。由于注释/文档和标记模型之间的关联很多,因此我假设标记表将包含外键。在这种情况下,验证应该在标记模型中进行,这样当您将注释/文档与标记关联时,验证将启动。

您编写语句的方式使其更加复杂了Deepak是什么意思?哪种说法?这个问题难以理解,令人困惑。你能试着用简单的方式写吗?可能是一些代码风格,而不是说有1对1的关系,所以重新措辞。是的,我会的。第二部分——可能是语言上的差异:但在创建时,我将标签与注释/文档相关联。然后需要检查该标记的标记类型:1)是否处于活动状态,2)是否已用于该注释/文档,3)是否允许出现(此处)。我正在查看rails的验证文档,但还需要一些指导/帮助。在您的标签模型中,您可以使用
验证:一些功能
。每次保存对象时,这将调用
某些函数。在
some_function
中,您可以执行所需的所有检查。如果它不满足任何条件,您应该向self(tag)对象添加一个错误,例如:
self.errors.add(:tag\u type,“应处于活动状态”)
对于处于活动状态的,我发现使用范围有效。范围是否需要进一步研究?例如,创建一个检查条件2和条件3的范围。如果需要在多个位置使用该范围,则该范围非常有用。对于条件2,您不需要作用域,您可以执行类似于
document.tag\u type.include?(self.tag\u type)
的操作,其中document.tag\u type可以是返回该文档的所有tag\u类型的函数。我不理解第三个条件。第三个条件:如果某个标记类型已出现\u once=true并已用于该批注或文档,则应从该批注或文档的剩余标记类型列表中删除该标记类型
belongs_to :annotation, :document