如果对象存在,则渲染关联对象
Posted
技术标签:
【中文标题】如果对象存在,则渲染关联对象【英文标题】:render an associated object if the object exists 【发布时间】:2015-01-21 15:27:02 【问题描述】:如果关联已定义,我正在尝试在我的助手上创建一个通用方法来呈现父对象关联。
下面是一些示例代码: 第一个方法显式呈现关联。下一个方法尝试通用(这个父对象有 9 个关联,所以我认为编写 9 个渲染方法不会 DRY。)
module SurveysHelper
def render_demographics_part(survey)
render survey.demographics_part if survey.demographics_part
end
def gen_renderer(part, survey)
render survey.part if survey.part
end
end
【问题讨论】:
您可以直接调用您的视图render(survey.part) || content_tag(:p, 'No part found')
。对于每个关联,您必须定义一个与该关联类似的部分名称。以demographics_part
为例,您的视图中必须有一个名为demographics_parts
的文件夹,并且在该文件夹中,当您调用render(survey. demographics_part)
名称_demographics_part .html.erb
时将呈现部分内容。
@Octopus-Paul,听起来你在说我必须明确渲染这些部分。您的示例render(survey.part) || content_tag(:p, 'No part found')
将不起作用,因为未定义survey.part。必须是render(survey.demographics_part) || content_tag(:p, 'no part found')
还是我错过了你的意思?
我使用survey.part
只是为了通用。看看这里speakerdeck.com/carlosantoniodasilva/… 在第 98 和第 99 幻灯片,以获得更好的解释
【参考方案1】:
我是这样做的:
def gen_renderer(part, survey)
if part.nil?
content_tag(:p, 'incomplete')
else
render part
end
end
我忘了part
只是一个对象引用——它是什么并不重要,只要它知道如何渲染自己(你需要在对象的视图路径中有一个部分——app/views/demographics_part/_demographics_part.html.erb
)
它有效,但可能有更好的方法。
【讨论】:
以上是关于如果对象存在,则渲染关联对象的主要内容,如果未能解决你的问题,请参考以下文章