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

假设我这样做了:

脚本/生成控制器主页

并在家庭控制器制作了一个方法..

def say puts "You are here" end 

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

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

我假设你有一个运行的rails服务器?

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

 helper_method :say 

在你的控制器中。

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

您只需在视图文件中使用<%say%>即可调用此方法。

注意, puts你的字符串中的任何内容放到STDOUT中,而不是在你的视图中输出,如果你想做的只是写一些文本,你最好只输出一个字符串并使用你的erb输出机制观点,例如

application_helper.rb

 def say "hello" end 

index.html.erb

 <%= say -%> 

puts对于要查找对象内容的unit testing调试非常有用

 puts @some_object.inspect 

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

 logger.error "hello" 

简而言之:你不这样做。

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

如果你想在say动作中访问:someadditionalparameter ,你可以使用params[:someadditionalparameter]来实现,在这种情况下,你会得到'foo'

好吧,视图通常不会调用控制器 – 它从我所知道的方向开始。 请求进来,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

首先,您必须运行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)如果您没有这样的文件,您的操作将不会显示,您将收到错误消息。