假设我这样做了:
脚本/生成控制器主页
并且在家庭控制器中制作了一种方法..
def say
puts "You are here"
end
我如何在index.html.erb中调用该方法?
当学习ruby时,它只是说要在终端中运行whatever.rb 运行你在该文件中编写的代码。只是好奇如何 这将适用于rails。
答案 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 )如果你没有这样的文件,你的行动将不会显示,你将收到错误。