【问题标题】:How do you call a method from the view in rails?如何从 Rails 的视图中调用方法?
【发布时间】:2009-09-04 08:37:23
【问题描述】:

假设我这样做了:

脚本/生成控制器主页

并在home控制器中做了一个方法..

def say
  puts "You are here"
end

如何在 index.html.erb 中调用该方法?

在学习 ruby​​ 时,它只是说在终端运行whatever.rb 运行您在该文件中编写的任何代码。只是好奇如何 这将适用于rails。

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

我假设你有一个 Rails 服务器正在运行?

有两种可能,首先你可以在控制器中使用一个辅助方法:

helper_method :say

在您的控制器中。

或者,更好的解决方案是将您的 say 方法移动到 home_helper(?).rb 帮助文件。

您可以通过在视图文件中使用 来调用它。

请注意,puts 将字符串中的任何内容都放入 STDOUT,而不是在视图中输出,如果您只想写一点文本,最好只输出一个字符串并使用你认为的erb输出机制,例如

application_helper.rb

def say
  "hello"
end

index.html.erb

<%= say -%>

puts 对于想要找出对象内容的单元测试调试非常有用

puts @some_object.inspect

如果你想输出到日志,你可以这样做:

logger.error "hello"

【讨论】:

  • 由于某种原因,当我将它放入 application_helper.rb 并使用 调用它时,我无法让它工作。当我将“helper_method :say”添加到控制器顶部并使用带有等号的 调用它时,我确实让它工作了。感谢您为我指明正确的方向。
【解决方案2】:

简而言之:你不要那样做。

你要做的是:
你在控制器上调用一个动作。对于每个动作,都有一个对应的视图,例如目录views/home中的“say.html.erb”。
要调用该操作并显示其相应的视图,您可以在 index.html.erb 中执行类似 &lt;%= link_to 'Say it', :controller =&gt; 'home', :action =&gt; 'say', :someadditionalparameter =&gt; 'foo' %&gt; 的操作

如果您想在say 操作中访问:someadditionalparameter,您可以使用params[:someadditionalparameter] 进行操作,在这种情况下,您将获得'foo'

【讨论】:

    【解决方案3】:

    好吧,视图通常不会调用控制器 - 据我所知,它会反过来。请求进来,Rails 根据你的 config/routes.rb 路由解析 URL,并将请求转发到相应控制器中的相应操作。默认情况下,Rails 为 /controller_name/action_name 提供了一个路由,因此您可以使用它来简单地处理 Rails 为您所做的事情。

    控制器运行后,Rails 会自动呈现关联的视图,按照惯例,该视图与其操作具有相同的名称。 'home' 控制器中的 'say' 动作自动使用的视图可以在 app/views/home/say.html.erb 下的目录结构中找到。您可以通过在控制器操作中调用 render 来覆盖此自动视图呈现,例如 render :template =&gt; :index

    最后,正如 Konstantinos 所说,您需要先启动服务器,然后才能在 Web 浏览器中浏览该站点。默认为http://127.0.0.1:3000/;要访问家庭控制器的 say 操作,您需要转到 http://127.0.0.1:3000/home/say

    【讨论】:

      【解决方案4】:

      首先你必须运行 rails 应用程序

      您可以通过从命令行转到您的 rails 应用程序根目录并输入

      ruby script/server
      

      然后打开浏览器并输入http://127.0.0.1:3000/home/say

      这应该指向控制器主页,动作说

      编辑:正如其他人所说,我忘了提到的是,如果您没有这样的文件,您的操作将不会显示,并且您会收到错误消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多