【发布时间】: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
假设我这样做了:
脚本/生成控制器主页
并在home控制器中做了一个方法..
def say
puts "You are here"
end
如何在 index.html.erb 中调用该方法?
在学习 ruby 时,它只是说在终端运行whatever.rb 运行您在该文件中编写的任何代码。只是好奇如何 这将适用于rails。
【问题讨论】:
标签: ruby-on-rails ruby
我假设你有一个 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"
【讨论】:
简而言之:你不要那样做。
你要做的是:
你在控制器上调用一个动作。对于每个动作,都有一个对应的视图,例如目录views/home中的“say.html.erb”。
要调用该操作并显示其相应的视图,您可以在 index.html.erb 中执行类似 <%= link_to 'Say it', :controller => 'home', :action => 'say', :someadditionalparameter => 'foo' %> 的操作
如果您想在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/;要访问家庭控制器的 say 操作,您需要转到 http://127.0.0.1:3000/home/say。
【讨论】:
首先你必须运行 rails 应用程序
您可以通过从命令行转到您的 rails 应用程序根目录并输入
ruby script/server
然后打开浏览器并输入http://127.0.0.1:3000/home/say
这应该指向控制器主页,动作说
编辑:正如其他人所说,我忘了提到的是,如果您没有这样的文件,您的操作将不会显示,并且您会收到错误消息。
【讨论】: