加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby on Rails:如何打印字符串以及它在哪里显

发布时间:2020-12-17 03:13:18 所属栏目:百科 来源:网络整理
导读:我知道这是一个微不足道的问题.但我在谷歌搜索,但无法找到这个问题的简单答案. 基本上我有一行说%= link_to'运行它',:method = ‘doIt’%在视图中,然后在相应的控制器中,我有doIt方法如下: def doIt puts "Just do it" end 我只是想检查一下,如果我点击R
我知道这是一个微不足道的问题.但我在谷歌搜索,但无法找到这个问题的简单答案.

基本上我有一行说<%= link_to'运行它',:method => ‘doIt’%>在视图中,然后在相应的控制器中,我有doIt方法如下:

def doIt
  puts "Just do it" 
end

我只是想检查一下,如果我点击Run it,它将输出字符串“Just do it”.我在localhost上运行它并且没有错误,但我无法在任何地方找到输出“Just do it”.它不会显示在rails控制台或rails服务器日志中.我只是想知道输出字符串的位置,在哪里找到它?

第2轮:所以这就是我试过的……

在index.html.erb中添加了这一行(这是根)

<%= link_to 'Run it',:method => 'do_it' %>

在网址中,它基本上只是http://localhost:3000/(因为我将控制器#index作为root路由)

显示只是一个带下划线的’Run it’,它链接到控制器中的’do_it’方法.

在控制器中,我包括这种方法

def do_it
  logger.debug "Just do it"
end

当我点击“运行它”,网址更改为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.

第3轮:

@Paul thx很多,但我遇到了错误

我的路线文件现在是:

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

我收到此错误:

Couldn’t find GollumStarter with ID=do_it

错误在这里,第二行:

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

我想知道它为什么路线显示?当我点击do_it时,它实际上转到localhost:3000 / gollum_starters / do_it这是正确的,但显然错误指向show方法?

第4轮:

@Paul,我转移资源:gollum_starters down:

root :to => "gollum_starters#index"

match 'gollum_starters/do_it' => 'gollum_starters#do_it',:as => 'do_it'

resources :gollum_starters

但得到了这个错误(我希望自杀),

Template is missing

Missing template gollum_starters/do_it with {:handlers=>[:erb,:rjs,
:builder,:rhtml,:rxml],:formats=>[:html],:locale=>[:en,:en]} in
view paths “~/project_name/app/views”

:/

———-回答第4轮————

基本上,当错误解释时,没有模板(即网页)显示因此抛出错误.解决方案是添加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帮助我.学到很多.

解决方法

link_to没有做你认为它的值为:method指的是HTTP动词.

取自ActionView::Helpers::UrlHelper的文档

:method – Symbol of HTTP verb. Supported verbs are :post,:get,:delete and :put. By default it will be :post.

您需要在routes.rb文件中定义使用您的方法的路由

# The order of routes is important as the first matched will be used
# therefore the match needs to be above 'resources :controller'
match 'controller/do_it' => 'controller#do_it',:as => 'do_it'

resources :gollum_starters # <--- This needs to be below the match or this will catch first

> controller / do_it是要匹配的路由
>控制器#do_it是控制器,后跟要使用的操作(用#分隔)
>:的值:as创建可在link_to中使用的路径do_it_path

你的link_to可能看起来像

<%= link_to "Do it",do_it_path %>

要完成请求的生命周期,您需要添加要呈现的视图

app/views/gollum_startes/do_it.html.erb # <-- Add file

摘要所有这些只是为了将日志打印到日志中而造成一些混乱,但它应该可以帮助您更好地理解整个生命周期.此外,这个答案可以作为一个文件来帮助你回避这个烂摊子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读