关于Rails的问题呈现调用

时间:2012-06-15 21:00:11

标签: ruby-on-rails ruby ruby-on-rails-3

在代码中看到以下行:

<%= 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签名中理解:

      

    返回由options hash指定的呈现结果。主要选项是:

         
        
    • :partial - 请参阅ActionView::PartialRenderer
    •   
    • :file - 呈现一个显式模板文件(以前是旧的默认模板),添加:locals以传递这些文件。
    •   
    • :inline - 呈现一个类似于在控制器中完成的内联模板。
    •   
    • :text - 呈现传入的文本。
    •   

2 个答案:

答案 0 :(得分:1)

将来,请尝试每个帖子提出一个问题。

  1. RenderingHelper是一个模块,其方法可通过include某处获得。阅读有关Ruby modules如何工作的更多信息。
  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)以键/值哈希的形式使用变量长度的参数列表。一旦理解了基本语法

  5. ,就不难理解或理解它们

答案 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. 签名难以理解?参数是选项的散列。