【问题标题】:Confused about how the render works in rails对渲染在 Rails 中的工作方式感到困惑
【发布时间】:2015-03-02 08:56:54
【问题描述】:

我对 Rails 还很陌生,但我一直在尝试通过在周末构建一些简单的项目(如博客、论坛、克隆)来解决这个问题。

我正在处理的博客之一是一个典型的博客,其中包含用户(设计)、帖子和 cmets。我一直在关注这个教程。

我一直很困惑的是设置 cmets 并渲染它。

本教程教我在名为 _comment.html.erb 的评论视图中制作部分评论,然后为表单 _form.html.erb 制作另一个评论。我完全理解调用表单我只是渲染'cmets/form'但是对于comment.html.erb我需要渲染@post.cmets它为什么不是'cmets/comment'?为什么它与 S 是 cmets?

我已尝试阅读有关 rails 上的渲染和 plurization 的内容,但其中大多数只是谈论模型。

【问题讨论】:

  • 嗯,它是 Rails,约定优于配置。我不熟悉 Rails 源代码,但这就是 Rails 的工作原理。

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

这里有两个关于配置的约定,这可能会引起您的一些困惑,但目的是为了节省时间。

如果遵循命名约定,Rails 将自动找到正确的部分,这意味着如果您的模型是 Comment,则视图部分位于 app/views/comments/_comment.html.erb。这意味着您在调用render 时不必指定部分的位置,而是可以直接传递模型对象,Rails 会确定您希望它呈现部分并自行找到它。

这里使用comments 复数的原因是您将所有comments 呈现为一个集合,而不仅仅是单个comment。这是一个方便的功能,允许开发人员简单地告诉 Rails 呈现一个集合,它会自动知道使用相应的部分。和打字一样:

@post.comments.each do |comment|
  render 'comments/comment`, object: comment
end

请注意,上面的代码是如何直接在模型对象上调用render 的,因此我们不必费心指定部分的位置(再次假设您在命名和定位事物时遵循约定)。如果我们将部分命名为其他名称,那么我们必须像您的其他示例一样指定位置。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多