我创建了模型,视图和控制器:
$ 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生成的控制器中添加新方法?
答案 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之类的东西),以备不时之需。