0

我正在修改一个 Ruby Rails 应用程序 - Redmine。我想修改一个呈现部分预览的函数。在我看来,我相信这是通过

<%= render :partial => 'documents/form' %>

我需要修改这个附加的功能。

我在哪里可以找到这个?是render我要找的功能吗?是:partial参数吗?运营商是做什么的=>

我确实意识到学习 Ruby 和 Rails 可以解决这些问题,但是对于目前的情况,我只需要知道足够多的知识就可以进行一些小的调整。我知道它不在控制器中。

4

3 回答 3

3

我假设您想更改部分本身的代码,并且只想知道在哪里可以找到该部分的模板,而不是更改render作为 Rails 本身一部分的方法,因为其他一些答案有建议。

render方法告诉 Rails 渲染一个特定的模板,可能带有一些传入的参数。部分是一种模板,旨在仅渲染页面的片段,例如单个小部件或页面的单个部分。语法render :partial => "documents/form"是 Ruby 将关键字参数传递给方法的方式;它本质上只是说渲染documents/form为部分模板。(在 Ruby 中,这实际上等同于render({:partial => "documents/form"}),它只是调用方法render,传入一个哈希表,其中:partial一个关键字映射到"documents/form"一个字符串)。

因此,实际呈现的代码是部分documents/forms. 按照惯例,部分文件是从前缀为_;的文件中加载的。如果您使用默认的 ERb 模板格式,那么它们可能会以.html.erb. 由于所有视图代码都存储在 中app/views,您可能会寻找app/view/documents/_form.html.erb. 是的,这不是一个特别明显的约定,但那是 Rails 适合你的。

有关更多信息,请参阅Rails 指南中的局部和渲染。

于 2010-09-16T20:02:53.370 回答
1

你在课堂上寻找render方法。ActionController::Base它将选项的哈希值作为参数。(顺便说一句,如果您在看到 ruby​​ 哈希时无法识别,那么“调整”rails 可能为时过早。您总是可以先阅读一些 Ruby 教程)

如您所知,猴子补丁非常非常糟糕,废话,废话,现在去打自己的脚吧:)

  class ActionController::Base
    def render
      # Now I'm in charge of rendering!
    end
  end
于 2010-09-16T19:45:40.553 回答
1

了解您正在尝试进行哪种调整可能会有所帮助。修改像渲染这样的核心函数很可能不是一个好主意,而且肯定有一个更简单的方法。

通过覆盖它,您将影响使用渲染的所有其他地方。为什么不创建自己的渲染方法作为助手呢?

# app/helpers/application_helper.rb
module ApplicationHelper
  def render_my_crazy_thing
    return "stuff you want to see: " + render(:partial => 'documents/form')
  end
end

ActionView#render 方法处理所有不同的渲染情况,切换不同的参数:部分、对象集合等。:partial => 'documents/form'参数是哈希的 ruby​​ 语法(键 => 值)。

于 2010-09-16T19:51:24.360 回答