今天做点试验(来自 《Ruby on Rails Tutorial》),先准备一个全新安装的 Rails 应用。
用户资源
生成一个 User 资源,给它添加一个 name 还有 email,存储用户的名字与电子邮件地址。
rails generate scaffold User name:string email:string
migrate 一下,会在数据库里创建 users 数据表,表里会有 name 与 email 字段。
rails db:migrate
现在你就可以在浏览器上管理用户了。
用户列表
/users
创建新用户
/users/new
更新用户
/users/1/edit
用户列表
微博资源
生成一个 Micropost 资源,表示微博,添加 content 与 user_id 字段,发布微博需要指定用户的 id 号。
rails generate scaffold Micropost content:text user_id:integer
migrate:
rails db:migrate
创建微博
微博列表
验证
要求微博的 content 字段的值最多 140 个字符,而且它是一个必填字段。
class Micropost < ApplicationRecord belongs_to :user validates :content, length: { maximum: 140 }, presence: true end
试验
试一下在发布微博的时候,在 content 里输入超过 140 个字符,然后提交一个表单,Rails 会出现提示。
关系
用户 has_many :microposts,一个用户可以发布多条微博。微博 belongs_to :user,一条微博属于一个用户。
app/models/user.rb
class User < ApplicationRecord has_many :microposts end
app/models/micropost.rb
class Micropost < ApplicationRecord belongs_to :user end
试验
打开 Rails 的控制台:
rails console
找到一个用户:
user = User.first
看看这个用户都发布了哪些微博:
user.microposts
找到这个用户发布的第一条微博:
micropost = user.microposts.first
看看发布这条微博的用户是谁:
micropost.user
幕后
生成一个资源,会给我们生成这个资源对应的模型,模型对应的数据表,资源的路由,对应的控制器,控制器用的视图。
rails generate scaffold User name:string email:string
下面是返回的东西:
Running via Spring preloader in process 50 invoke active_record create db/migrate/20161014000332_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml invoke resource_route route resources :users invoke scaffold_controller create app/controllers/users_controller.rb invoke erb create app/views/users create app/views/users/index.html.erb create app/views/users/edit.html.erb create app/views/users/show.html.erb create app/views/users/new.html.erb create app/views/users/_form.html.erb invoke test_unit create test/controllers/users_controller_test.rb invoke helper create app/helpers/users_helper.rb invoke test_unit invoke jbuilder create app/views/users/index.json.jbuilder create app/views/users/show.json.jbuilder create app/views/users/_user.json.jbuilder invoke assets invoke coffee create app/assets/javascripts/users.coffee invoke scss create app/assets/stylesheets/users.scss invoke scss create app/assets/stylesheets/scaffolds.scssRuby