向scaffold生成的控制器添加动作

时间:2011-04-12 10:50:31

标签: ruby-on-rails

我创建了模型,视图和控制器:

$ rails generate scaffold Post name:string title:string content:text

然后我在Post控制器上添加了方法:

def fill_default_data
  Post.fill_default_data
end

但是当我在浏览器中打开http://localhost:3000/posts/fill_default_data时,我收到错误:

  

ActiveRecord :: RecordNotFound in   PostsController#节目

     

无法找到帖子   ID = fill_default_data

看起来Rails看不到fill_default_data动作并使用show方法。如何在scaffold生成的控制器中添加新方法?

2 个答案:

答案 0 :(得分:12)

您应该将相关路线添加到config/routes.rb文件中。如果您目前有:

resources :posts

您应该将其更改为:

resources :posts do
  collection do
    get :fill_default_data
  end
end

这将生成您可以通过/posts/fill_default_data访问的路线。现在,您的应用实际上正在访问show动作并填写“fill_default_data”作为ID。

答案 1 :(得分:0)

或者,如果要将方法添加到成员而不是集合,请使用以下命令:

resources :posts do
  member do
    get :fill_default_data, :as => 'fill_out_data'
  end
end

如果您在单个帖子而不是帖子集合上执行操作,则使用此成员。此外,:as选项会生成命名路径助手(如* _path或* _url之类的东西),以备不时之需。