如何从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)如果您没有这样的文件,您的操作将不会显示,您将收到错误消息。
- 将字段名称作为参数传递给自定义validation方法Rails 4
- rails 4 collection_select多个嵌套属性未正确保存
- Rails – 如何找到某个列值为nil的所有行where()
- $ gem install rails失败。 任何解决方法?
- M Hartl的Ruby on Rails教程第5章主页上的自定义标题
- Ruby on Rails:使用“rails generate controller welcome”时权限被拒绝
- 使用Unicode格式化阿拉伯语和日语文本?
- 在String和Classname之间转换
- SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv3读取服务器hello A(OpenSSL :: SSL :: SSLError)