我知道这是一个琐碎的问题。但我已经在谷歌上搜索了很久,却找不到这个问题的简单答案。
基本上,我有一行代码在视图中,它说<%= link_to 'Run it', :method => 'doIt' %>
,然后在相应的控制器中,我有以下doIt
方法:
def doIt
puts "Just do it"
end
我希望确认一下,如果我点击“Run it”,它会输出字符串“Just do it”。我在本地主机上运行了这个程序,没有错误,但我找不到任何输出“Just do it”的地方。它既没有显示在Rails控制台中,也没有显示在Rails服务器日志中。我只是想知道puts输出字符串的位置在哪里,该如何找到它?
第二轮:这是我尝试过的……
在index.html.erb(即根目录)中添加了这一行:
<%= link_to 'Run it', :method => 'do_it' %>
在URL中,基本上只是http://localhost:3000/(因为我将路由控制器#index作为根目录)。
显示的只是一个下划线“运行”,它链接到控制器中的“do_it”方法。
在控制器中,我包括了这个方法。
def do_it
logger.debug "Just do it"
end
当我点击'Run it'时,网址会更改为http://localhost:3000/gollum_starters?method=do_it,并且在development.log中会写入以下内容:
Started GET "/gollum_starters?method=do_it" for 127.0.0.1 at 2011-08-25 15:27:49 -0700
Processing by GollumStartersController#index as HTML
Parameters: {"method"=>"do_it"}
[1m[35mGollumStarter Load (0.3ms)[0m SELECT "gollum_starters".* FROM "gollum_starters"
Rendered gollum_starters/index.html.erb within layouts/application (3.6ms)
Completed 200 OK in 16ms (Views: 7.7ms | ActiveRecord: 0.3ms)
此外,我尝试了所有的logger.error/info/fatal/etc ...和Rails.logger.error/info/fatal/etc,但都没有在开发日志中打印出"Just do it"这一行。
@Paul:我没有触及环境文件夹或文件,我假设默认情况下创建一个新的rails应用程序时,它处于开发状态?
@Maz:是的,你说得对,我只是想测试do_it方法是否被调用。为了这样做,我只想在控制器中打印出一些东西。我想不到任何比仅仅打印一个字符串更简单的方法,但这个问题让我很痛苦。我只使用textmate,没有IDE。
第三轮:
@Paul非常感谢,但我遇到了错误。
我的路由文件现在是:
resources :gollum_starters
root :to => "gollum_starters#index"
match 'gollum_starters/do_it' => 'gollum_starters#do_it', :as => 'do_it'
我的index.html.erb现在是:
<%= link_to "Do it", do_it_path %>
我的gollum_starters_controller.rb文件
def do_it
logger.debug 'Just do it'
end
我在这里遇到了错误:
ID为do_it的GollumStarter未找到
错误位于此处,第二行:
def show
@gollum_starter = GollumStarter.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @gollum_starter }
end
end
我想知道为什么会路由到show页面?当我点击do_it时,它实际上跳转到localhost:3000/gollum_starters/do_it,这是正确的,但显然错误指向了show方法?
第四轮:
@Paul,我将资源:gollum_starters下移了。
root :to => "gollum_starters#index"
match 'gollum_starters/do_it' => 'gollum_starters#do_it', :as => 'do_it'
resources :gollum_starters
但是我遇到了这个错误(天啊,我想自杀)
模板丢失
在视图路径“~/project_name/app/views”中,使用{:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]}的gollum_starters/do_it模板丢失
:/
---------- 第四轮回答 ------------
基本上,正如错误所解释的那样,没有模板(即网页)可显示,因此会抛出错误。解决方法是添加redirect_to,这种情况下我将重定向到root_url。
def do_it
logger.debug 'Just do it'
redirect_to(root_url)
end
现在一切正常,“Just do it”终于输出到了development.log和rails服务器控制台。
感谢Maz,Paul和Andrew的帮助。我学到了很多。