2

我正在尝试学习 Ruby on Rails 并尝试手动编写一些代码,以便了解它是如何工作的。

我做了这个小控制器:

class TestsController < ApplicationController
  def test

      def show
        render :text => "Hi from TestsController!"
      end  

  end
end

这就是我的观点:

<h3> Hello test </h3>

这是我的 routes.rb 片段:

resource :test

但它给出了一个错误:The action 'show' could not be found for TestsController

谢谢!

这是 rake 路由的输出:

home_index GET    /home/index(.:format) home#index
      root        /                     home#index
      test POST   /test(.:format)       tests#create
  new_test GET    /test/new(.:format)   tests#new
 edit_test GET    /test/edit(.:format)  tests#edit
           GET    /test(.:format)       tests#show
           PUT    /test(.:format)       tests#update
           DELETE /test(.:format)       tests#destroy
4

3 回答 3

5

一个基本的控制器如下所示:

class TestsController < ApplicationController
  def show
  end
end

respond_to如果您只想渲染默认视图(在本例中为:),则不需要该块app/views/tests/show.html.erb。障碍是当respond_to您有一些更高级的需求时。

于 2012-04-09T16:33:47.347 回答
2

@klump 说的是正确的。尝试运行一个基本的脚手架。这将为您生成控制器、模型和视图。当您学习 Rails 时,这个生成器非常棒。

 rails g scaffold Test

还可以查看http://www.railsforzombies.com,因为它是学习 Rails 的好方法。

于 2012-04-09T17:30:27.773 回答
1

respond_to当您希望您的操作响应多种格式时使用。客户端在 HTTP Accept 标头中设置所需的格式。

然后,您可以为每种格式指定不同的操作。

例子

def show
    respond_to do |format|
       format.html { Rails.logger.debug "rendering show.html" }
       format.xml { Rails.logger.debug "rendering show.xml" }
       format.js { Rails.logger.debug "rendering show.js" }
    end
end

有关更多示例,请参阅API

于 2012-04-09T16:43:30.200 回答