0

在代码中看到以下行时:

<%= render :partial => 'ingredients/form',
           :locals => {:form => recipe_form} %>

我想知道实际发生了什么。

  1. 我注意到renderRenderingHelper. 我如何知道在写作时可以使用哪个对象?我怎样才能RenderingHelper像在Java(即RenderingHelper.render)中那样使用它而不使用前缀。我是否在表单视图中继承了它?

  2. 由于我知道Java和C#,所以我在代码中搜索ingredients/form并找不到它。我猜这是配置规则约定的一部分。它是什么?它在哪里定义?

  3. 关于:locals => {:form => recipe_form}线路,是发送到的参数render吗?是双重任务吗?=>操作员在这里实际上做了什么?

  4. 如果它是一个参数,从render签名中很难理解:

    返回由选项哈希指定的渲染结果。主要选项是:

    • :partial- 见ActionView::PartialRenderer
    • :file- 渲染一个显式模板文件(这曾经是旧的默认值),添加:locals以传递那些。
    • :inline- 呈现一个内联模板,类似于它在控制器中的完成方式。
    • :text- 渲染传入的文本。
4

2 回答 2

1

以后,请尝试在每个帖子中提出一个问题。

  1. RenderingHelper是一个模块,它的方法可以通过某个include地方获得。阅读有关 Ruby模块如何工作的更多信息。
  2. 部分文件名始终带有下划线前缀,您的部分文件名将位于app/views/ingredients/_form.html.erb
  3. :form和都是:locals传递给渲染的选项哈希中的键;对应的值:locals是一个嵌套散列,其中包含一个键,:form其值是一个名为 的局部变量recipe_form。如果您明确指定一些可选的标点符号,这可能会更明显:

    <%= render({:partial => 'ingredients/form', :locals => {:form => recipe_form}}) %>
    
  4. Ruby(尤其是 Rails)使用键/值散列形式的可变长度参数列表。一旦您了解了基本语法,它们就不难使用或理解

于 2012-06-15T21:11:47.250 回答
0

2. "ingredients/form"不是代码——它是一个字符串。它指的_form是模型的部分ingredient。它位于app/views/ingredients/_form.erb.html.

3. :locals => { ... }表示该render函数正在获取一个以符号:locals为键的地图条目。render知道如何处理该地图。

这不是“双重赋值”,而是:locals键的值也是一个映射。=>,或“散列火箭”,是 Ruby 1.8/1.9 语法,用于将映射值分配给映射键。在 Ruby 1.9 中,您可以使用快捷方式locals: { ... }.

(更具可读性的 IMO 取决于值——当值是键时,我认为新语法是令人发指的,否则我喜欢它。)

4.签名难懂怎么办?参数是选项的散列。

于 2012-06-15T21:12:07.793 回答