Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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_Blogs - Fatal编程技术网

Ruby on rails Rails:如何在博客部分中具有动态属性

Ruby on rails Rails:如何在博客部分中具有动态属性,ruby-on-rails,ruby,blogs,Ruby On Rails,Ruby,Blogs,我有一个与博客应用程序相关的软件数据库架构/设计问题。假设我想为用户提供在页面中添加节的功能。根据web开发中的标准实践,每个页面部分可以有许多不同的组件 例如: 包含段落和图像或两个这样的组成部分的部分,或 有四个图像或一个或两个画廊的部分 有两段或两段的章节 有视频和段落等的部分 我可以采取的一种方法是构建每种类型的组件类型及其MVC组件,并在需要时使用它。但我觉得从设计的角度来看,如果我有1000个这样的组件,那么活动记录中将有1000个表。那是没有效率的 我觉得需要动态属性生成,或者

我有一个与博客应用程序相关的软件数据库架构/设计问题。假设我想为用户提供在页面中添加节的功能。根据web开发中的标准实践,每个页面部分可以有许多不同的组件

例如:

  • 包含段落和图像或两个这样的组成部分的部分,或
  • 有四个图像或一个或两个画廊的部分
  • 有两段或两段的章节
  • 有视频和段落等的部分
我可以采取的一种方法是构建每种类型的组件类型及其MVC组件,并在需要时使用它。但我觉得从设计的角度来看,如果我有1000个这样的组件,那么活动记录中将有1000个表。那是没有效率的

我觉得需要动态属性生成,或者使用同一个表来存储不同类型的组件,然后根据类型属性或工厂模式实现动态更改视图(我觉得这是一个很好的候选者)


如果您能帮助我完成此设计或建议其他处理动态组件生成的方法,我将不胜感激。

您可以通过将节的可能配置存储为表中的序列化哈希来获得节的最大灵活性

假设您有一个
sections
表,其中包含类型为
text
的字段
config
模型将声明
序列化:配置
,并将自动
序列化
/
反序列化
分配给
节.config
实例的任何哈希

config
散列将具有分区布局所需的属性,例如

section.config = {
  components: [:paragraph, :image, :image, video],
  # ... and any other such config settings you will need in your view to render this section as you want it
}
现在,您可能要实例化一个
模型并在show视图中进行渲染,要渲染该节的每个组件,每个组件都有一个分部。通过这种方式,您可以迭代
section.config[:components]
,并使用该名称呈现片段,例如

section.config[:components].each do |component|
  render partial: component, locals: { content: 'some content for the paragraph' }
  # the above would render, for example, the 'paragraph' partial
end
通过这种性质的散列,您可以让用户根据自己的需要创建自己的节,选择预定义的组件(您有部分)并将它们以任意组合添加到节中


您甚至可以更进一步,创建一个
组件
模型,
部分
模型将与许多实例关联,即
部分有许多:组件
。这样,它将不再使用
Section
config
字段来存储
:components
数组,而是拥有许多
Component
模型,可以迭代这些模型并访问在渲染整个Section时可以使用的更丰富的属性集。这将使您能够使用Rails表单帮助程序提供的嵌套字段,您可以在其中构建一个表单,用户将使用该表单创建复杂的节,并能够对它们进行重新排序、命名、添加样式等(假设您向组件添加字段以存储所有这些配置数据)。使用最后一种方法,您可以使用组件表存储节中每个组件的内容数据。

非常感谢!:)我使用后一种方法,通过使用类型创建一个组件(在我的示例中,名为widget,其中包含多个字段和与每个字段关联的css字段,以及一个指定widget类型的类型字段:段落、图像、视频等),我动态地向用户提供一个表单,用户可以填写该表单,表单中包含与widget类型相关的字段,这样只会生成必要的字段。最后,在视图中,我对每个部分的小部件进行迭代,并根据类型动态生成div!