在代码中看到以下行:
<%= render :partial => 'ingredients/form',
:locals => {:form => recipe_form} %>
我想知道实际发生了什么。
我注意到render
是RenderingHelper
的一部分。我怎么知道写作时我可以使用哪个对象?如何在没有RenderingHelper
前缀的情况下使用它,就像在Java中一样(即RenderingHelper.render
)。我是否在表单视图中继承它?
由于我了解Java和C#,因此我搜索了ingredients/form
,但在代码中找不到它。我猜它是配置规则的约定的一部分。它是什么?在哪里定义?
关于:locals => {:form => recipe_form}
行,该参数是否已发送至render
?这是双重任务吗? =>
运算符实际上在这里做了什么?
如果是参数,则很难从render
签名中理解:
返回由options hash指定的呈现结果。主要选项是:
:partial
- 请参阅ActionView::PartialRenderer
。:file
- 呈现一个显式模板文件(以前是旧的默认模板),添加:locals
以传递这些文件。:inline
- 呈现一个类似于在控制器中完成的内联模板。:text
- 呈现传入的文本。
答案 0 :(得分:1)
将来,请尝试每个帖子提出一个问题。
RenderingHelper
是一个模块,其方法可通过include
某处获得。阅读有关Ruby modules如何工作的更多信息。app/views/ingredients/_form.html.erb
:form
和:locals
都是传递给渲染的选项哈希中的键; :locals
的相应值是嵌套哈希,其中包含一个键:form
,其值为名为recipe_form
的局部变量。如果您明确指定了一些可选的标点符号,这可能会更明显:
<%= render({:partial => 'ingredients/form', :locals => {:form => recipe_form}}) %>
Ruby(特别是Rails)以键/值哈希的形式使用变量长度的参数列表。一旦理解了基本语法
答案 1 :(得分: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取决于值 - 当值是键时,我认为新语法是令人发指的,否则我喜欢它。) < / p>
4. 签名难以理解?参数是选项的散列。