【问题标题】:no output in custom created views自定义创建的视图中没有输出
【发布时间】:2011-06-07 23:43:56
【问题描述】:

您好,我创建了一篇控制器文章并添加了以下代码

定义儿童
  @message='你好世界'
    respond_to 做 |格式|
    格式.html
    结尾

结尾

然后我创建了

app/views/articles/
中的
chid.html.erb
文件

并写了如下代码

你好世界

当我给出以下网址时

../articles/chid 
我没有得到任何输出.. 我错过了什么吗?

我的日志部分

Processing ArticlesController#show (for 127.0.0.1 at 2011-01-12 21:51:01) [GET]会话ID:BAh7BzoMY3NyZl9pZCIlMTA0ZWY2ZTUzYjQxZGJkZmFlMTQwNWRjYjczNTRm%0AODAiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhh%0Ac2h7AAY6CkB1c2VkewA%3D - de7737601817f52c1b72daca6061c5126f3a5022 参数:{"action"=>"show", "id"=>"chid", "controller"=>"articles"} 在布局/文章中渲染模板 渲染文章/节目在 0.01000 (100 reqs/sec) 内完成 |渲染:0.00600 (60%) |数据库:0.00000 (0%) | 200 OK [localhost/articles/chid/]

我的router.rb文件如下

ActionController::Routing::Routes.draw 做 |map| 地图资源:文章 map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' map.match ':controller/:action/' => 'Article#chid' 结尾

【问题讨论】:

  • @Matheus:不,我应该在那里做什么?对不起,我只是在学习 ROR
  • @Matheus:页面正在正确呈现..但是没有输出
  • @jdl。这是你问的吗?处理ArticlesController#显示(为127.0.0.1在2011-01-12 21时51分01秒)[GET]会话ID:BAh7BzoMY3NyZl9pZCIlMTA0ZWY2ZTUzYjQxZGJkZmFlMTQwNWRjYjczNTRm%0AODAiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhh%0Ac2h7AAY6CkB1c2VkewA%3D - de7737601817f52c1b72daca6061c5126f3a5022参数:{ “动作”=> “节目”,“ id"=>"chid", "controller"=>"articles"} 布局/文章中的渲染模板 渲染文章/节目 0.01000 (100 reqs/sec) |渲染:0.00600 (60%) |数据库:0.00000 (0%) | 200 好 [localhost/articles/chid/]
  • 服务器处理它就好像,显示动作是用 id chid 调用的。它不调用动作 chid ..这是我从日志中理解的。 @jdl
  • 您需要为您的路由添加一个特殊情况以匹配 chid 操作,因为它不是 CRUD 操作。在这种情况下,它会将chid 解释为文章的id 并尝试对其进行show

标签: ruby-on-rails


【解决方案1】:

config 目录中有一个名为routes.rb 的文件。这个文件告诉 Rails 如何通过映射控制器的动作来响应特定的 URL。

考虑这个例子:

match '/articles/chid' => 'Articles#chid'

这会将#{your_site_url}/articles/chid 路由到ArticlesControllerchid 操作,进而呈现位于views/articles 中的chid.html.erb 视图。

我们还可以告诉 Rails 将/ 路由到什么:

root :to => 'Articles#chid'

最后,我们还可以使用所谓的绑定参数将任何控制器路由到任何操作:

match ':controller/:action'

最后,请务必查看Rails Guides on Routing

更新

尝试使用以下routes.rb

ActionController::Routing::Routes.draw do |map|
  map.connect ':controller/:action'
end

编辑

根据您刚刚发布的 routes.rb 文件,这行是罪魁祸首。删除它。

map.connect ':controller/:action/:id'

请注意,路由按照从文件顶部到底部的顺序匹配,一旦找到匹配项,就完成了。它不会查看您的其余路线。

【讨论】:

  • @Matheus。我在 routes.rb map.match ':controller/articles/chid' => 'Articles#chid' 中添加了以下行。它仍然显示未找到 id=chid 的记录。
  • 如果我没有指定控制器,它会给我一个错误。我正在使用 rails 2.0.2
  • 您的routes.rb 中是否有map.resources :articles?如果是这样,请尝试在此之前添加map.match '/articles/chid' => 'Articles#chid',或者将其全部删除。 (顺便说一下,我给出的说明是针对 Rails 3 的......但我认为它们应该稍作修改)
  • ActionController::Routing::Routes.draw 做 |map| map.resources :articles map.resources :articles map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' map.match 'articles/chid' => ' Articles#chid' 这是我的路由器文件的内容。我仍然得到同样的错误:(我的模型名称是文章。
  • 除非您对ArticlesController 有更多操作,否则您只需要匹配chid 操作,所以ActionController::Routing::Routes.draw do |map| map.match '/articles/chid' => 'Articles#chid' end 应该这样做。用那个替换整个内容。如果您有更多操作,请尝试将'/articles/chid' 替换为':controller/:action'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2011-05-24
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多