【问题标题】: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 幻灯片,以获得更好的解释

标签: ruby-on-rails view associations helper


【解决方案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

它有效,但可能有更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2020-03-19
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多