为什么rails生成控制器为每个数据库项创建这些获取路径?

时间:2014-07-14 05:45:41

标签: ruby-on-rails

所以我跑了

rails g model Post user_id:integer title_id:integer:index story:text tags:string eol:datetime
rails g controller Post user_id:integer title_id:integer:index story:text tags:string eol:datetime

并创建了以下路线:

Rails.application.routes.draw do
  get 'post/user_id:integer'

  get 'post/title_id:integer:index'

  get 'post/story:text'

  get 'post/tags:string'

  get 'post/eol:datetime'

  devise_for :users
  root :to => "visitors#index"
end

和以下控制器

class PostController < ApplicationController
  def user_id:integer
  end

  def title_id:integer:index
  end

  def story:text
  end

  def tags:string
  end

  def eol:datetime
  end
end

我很困惑为什么会这样做。这是针对API请求的吗?我已经习惯了具有典型indexnewupdate CRUD内容的控制器。是因为我应该让他们离开generate命令吗?即便如此,这可能是一种生成API的方法吗?

最后一个问题我看过:索引标记在模型之前,但我不明白它的目的,或者它将如何帮助。

但是,唯一需要回答这个问题的问题是为什么路线是以这种方式产生的。谢谢。

3 个答案:

答案 0 :(得分:2)

当你这样做时:

rails g controller Post action_name1, action_name2

然后将其视为控制器操作。所以在你的命令中:

rails g controller Post user_id:integer title_id:integer:index story:text tags:string eol:datetime

您的属性被视为操作。

生成的路线也是如此。

如果您希望rails只使用1个命令自动为您设置模型,控制器,视图和路径,请使用:

rails g scaffold Post user_id:integer title_id:integer:index story:text tags:string eol:datetime

(参考:bbozo)

随意问更多我不理解。

答案 1 :(得分:1)

你可能想做

rails g scaffold Post user_id:integer title_id:integer:index story:text tags:string eol:datetime

答案 2 :(得分:0)

rails g model Post
对于user_id:integer title_id:integer:index story:text tags:string eol:datetime模型

会将attributes视为Post

rails g controller Post会将user_id:integer title_id:integer:index story:text tags:string eol:datetime视为actions模型的Post

for CRUD Scaffold是rails中的最佳功能...有关详细信息,您可以阅读Rails的 Ruby on Rails Guide 官方tutorail;)