如何从rails中的视图调用方法?

时间:2009-09-04 08:37:23

标签: ruby-on-rails ruby

假设我这样做了:

脚本/生成控制器主页

并且在家庭控制器中制作了一种方法..

def say
  puts "You are here"
end

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

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

4 个答案:

答案 0 :(得分:17)

我假设你有一台rails服务器正在运行?

有两种可能性,首先你可以使用:

在控制器中说出辅助方法
helper_method :say

在您的控制器中。

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

你可以通过使用<%say%>来调用它在您的视图文件中。

请注意,puts很好地将字符串中的内容放到STDOUT中,而不是在视图中输出,如果您只想写一些文本,那么输出字符串会更好在视图中使用erb输出机制,例如

application_helper.rb

def say
  "hello"
end

index.html.erb

<%= say -%>
对于要查找对象内容的单元测试调试,

puts非常有用

puts @some_object.inspect

如果您想要输出到日志,您可以执行以下操作:

logger.error "hello"

答案 1 :(得分:3)

简而言之:你不这样做。

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

如果您想在:someadditionalparameter操作中访问say,则可以使用params[:someadditionalparameter]访问'foo',在这种情况下,会{{1}}。

答案 2 :(得分:1)

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

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

最后,像Konstantinos所说,您需要先启动服务器,然后才能在Web浏览器中浏览该站点。它默认为http://127.0.0.1:3000/;要达到家庭控制器的说法,你可以去http://127.0.0.1:3000/home/say

答案 3 :(得分:0)

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

您可以从命令行转到rails app根目录,然后输入

ruby script/server

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

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

编辑:正如其他人说的那样,我忘了提到你需要一个视图(你的例子中app/views/CONTROLLER_NAME/ACTION_NAME.html.erb下的约定文件是app / views / home / say.html.erb )如果你没有这样的文件,你的行动将不会显示,你将收到错误。