试图在rails控制器中创建一个方法

Cat*_*ish 1 ruby ruby-on-rails ruby-on-rails-3

我仍然试图获得铁轨的悬念,我正在尝试创建一个简单的应用程序,其中我可以输入数据,然后提交它,它将存储在数据库中.我通过启动一个新项目然后运行来实现这一点非常简单:

$ rails generate scaffold RSVP firstName:string lastName:string
Run Code Online (Sandbox Code Playgroud)

现在我想通过表单添加新记录后重定向到感谢页面.

我手动将以下方法添加到我的rsvps_controller.rb文件中:

# GET /rsvps/thank_you
  def thank_you
    respond_to do |format|
      format.html # thank_you.html.erb
      format.json { render json: @rsvps }
    end
  end
Run Code Online (Sandbox Code Playgroud)

这一行在我的路线文件中:

resources :rsvps 
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我运行rake路线时,我没有看到我的thank_you方法的路线.不应该我的:rsvps资源拿起我的thank_you路由以及路由如何知道哪个控制器方法是哪个http调用(get,post,put等)?

小智 6

为了获得将在您的控制器中执行该操作的路由,您应该在routes.rb文件中具有以下内容:

resources :rsvps do
  member { get :thank_you }
end
Run Code Online (Sandbox Code Playgroud)

要么

resources :rsvps do
  collection { get :thank_you }
end
Run Code Online (Sandbox Code Playgroud)

这取决于您是否要访问刚刚创建的资源.

你可以看看@ http://guides.rubyonrails.org/routing.html它可以帮助你更好地低估路由机制.

  • 资源路由中的`member`方法意味着"这些将用于与单个记录相关".所以ID是必要的,以便找到记录.如果您不想要ID,(也就是说,您希望它应用于"控制器中的所有记录",或者您希望它与单个记录无关),那么您应该每秒使用`collection`例.为了澄清,使用`member`,`:id`将被传递到控制器方法本身内的`params [:id]`.这是在单个rsvp上执行,或者对所有或不执行任何操作的区别. (3认同)