对于刚接触rails的童鞋,一定会对这个功能产生很大的兴趣,那就是脚手架,它会为我们自动生成简单的模型,控制器和视图,我们只需要在对其强化一下,就可以直接拿过来用了。当然下面也包括了我收集的一些rails基础的数据库操作方法。
生成脚手架
手动生成migration,然后每个字段生成脚手架
rails generate scaffold Article title:string location:string excerpt:string body:text published_at:datetime --skip-migration
1.生成新的记录
①使用new构造函数
>> article = Article.new => #<Article id: nil, title: nil, body: nil, published_at: nil, created_at: nil, updated_at: nil, excerpt: nil, location: nil> >> article.new_record? => true >> article.attributes => {"body"=>nil, "created_at"=>nil, "excerpt"=>nil, "location"=>nil, "published_at"=>nil, "title"=>nil, "updated_at"=>nil} Here, you’re using reader methods, which read and return the value of the attribute in question. Because this is a brand-new record and you haven’t given it any information, all your attributes are nil, which means they have no values. Let’s remedy that now using (what else?) writer methods: >> article.title = 'RailsConf' => "RailsConf" >> article.body = 'RailsConf is the official gathering for Rails developers..' => "'RailsConf is the official gathering for Rails developers.." >> article.published_at = '2013-04-13' => "2013-04-13" >> article => #<Article id: nil, title: "RailsConf", body: "RailsConf is the official gathering for Rails devel...", published_at: "2013-04-13 00:00:00", created_at: nil, updated_at: nil, excerpt: nil, location: nil> >> article.save (0.1ms) begin transaction SQL (2.2ms) INSERT INTO "articles" ("body", "created_at", "published_at", "title", "updated_at") VALUES (?,?,?,?,?) [["body", "RailsConf is the official gathering for Rails developers.."], ["created_at", Sat, 13 Apr 2013 15:50:29 UTC +00:00], ["published_at", Wed, 13 Apr 2013 00:00:00 UTC +00:00], ["title", "RailsConf"], ["updated_at", Sat, 13 Apr 2013 15:50:29 UTC +00:00]] (2.9ms) commit transaction => true >> Article.count => 1 >> article.new_record? => false >> article = Article.new >> article.title = "Introduction to SQL" >> article.body = "SQL stands for Structured Query Language, .." >> article.published_at = Date.today >> article.save >> article = Article.new(:title => "Introduction to Active Record", :body => "Active Record is Rails's default ORM..", :published_at => Date.today) >> article.save
②使用create方法
>> Article.create(:title => "RubyConf 2013", :body => "The annual RubyConf will take place in..", :published_at => '2013-04-13') => #<Article id: 4, title: "RubyConf 2013", body: "The annual RubyConf will take place in..", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:17:19", updated_at: "2013-04-13 23:17:19", excerpt: nil, location: nil> >> attributes = { :title => "Rails Pub Nite", :body => "Rails Pub Nite is every 3rd Monday of each month, except in December.", :published_at => "2013-04-13"} => {:title=>"Rails Pub Nite", :body=>"Rails Pub Nite is every 3rd Monday of each month, except in December.", :published_at=>" 2013-04-13"} >> Article.create(attributes) => #<Article id: 5, title: "Rails Pub Nite", body: "Rails Pub Nite is every 3rd Monday of each month, e...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:36:07", updated_at: "2013-04-13 23:36:07", excerpt: nil, location: nil> >> Article.count => 5
③使用id查询单条记录
>> Article.find(3) => #<Article id: 3, title: "Introduction to Active Record", body: "Active Record is Rails's default ORM..", published_at: "2013-04-13 04:00:00", created_at: "2013-04-13 23:15:37", updated_at: "2013-04-13 23:15:37", excerpt: nil, location: nil> >>article = Article.find(3) =>#<Article id: 3 ...> >>article.id =>3 >>article.title =>"Introduction to Active Record"
④使用first和last查询单条记录
>> Article.first => #<Article id: 1, title: "RailsConf", body: "RailsConf is the official gathering for Rails devel...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:12:09", updated_at: "2010-04-13 23:12:09", excerpt: nil, location: nil> >> Article.last => #<Article id: 5, title: "Rails Pub Nite", body: "Rails Pub Nite is every 3rd Monday of each month, e...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:36:07", updated_at: "2013-04-13 23:36:07", excerpt: nil, location: nil>
⑤查询多条记录
>> articles = Article.all => [#<Article id: 1,..> #<Article id: 2,..>, #<Article id: 3,..>, #<Article id: 4,..> , #<Article id: 5,..>] >> articles.class => Array >> articles.size => 5 >> articles[0] => #<Article id: 1, title: "RailsConf", body: "RailsConf is the official gathering for Rails devel...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:12:09", updated_at: "2013-04-13 23:12:09", excerpt: nil, location: nil> >> articles[0].title => "RailsConf" >> articles.first.title => "RailsConf" >> articles.each { |article| puts article.title } RailsConf Introduction to SQL Introduction to Active Record RubyConf 2010 Rails Pub Nite => [#<Article id: 1,..> #<Article id: 2,..>, #<Article id: 3,..>, #<Article id: 4,..> , #<Article id: 5,..>]
⑥使用order对数据进行排序
默认是降序,我们可以使用DESC改变为升序
>> articles = Article.order("published_at") => [#<Article id: 1,..> #<Article id: 2,..>, #<Article id: 3,..>, #<Article id: 4,..> , #<Article id: 5,..>] >> articles.each {|article| puts article.published_at }2013-04-13 00:00:00 UTC2013-04-13 04:00:00 UTC2013-04-13 04:00:00 UTC2013-04-13 00:00:00 UTC2013-04-13 00:00:00 UTC => [#<Article id: 1,..> #<Article id: 2,..>, #<Article id: 3,..>, #<Article id: 4,..> , #<Article id: 5,..>] >> articles = Article.order ('published_at DESC') => [#<Article id: 4,..> #<Article id: 5,..>, #<Article id: 2,..>, #<Article id: 3,..> , #<Article id: 1,..>] >> articles.each {|article| puts article.published_at }2013-04-13 00:00:00 UTC2013-04-13 00:00:00 UTC2013-04-13 00:00:00 UTC2013-04-13 00:00:00 UTC2013-04-13 00:00:00 UTC => [#<Article id: 4,..> #<Article id: 5,..>, #<Article id: 2,..>, #<Article id: 3,..> , #<Article id: 1,..>]
⑦条件查询
>> Article.where(:title => 'RailsConf').first => #<Article id: 1, title: "RailsConf", body: "RailsConf is the official gathering for Rails devel...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:12:09", updated_at: "2013-04-13 23:12:09", excerpt: nil, location: nil> >> Article.where(:title => 'RailsConf').all => [#<Article id: 1, title: "RailsConf", body: "RailsConf is the official gathering for Rails devel...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:12:09", updated_at: "2013-04-13 23:12:09", excerpt: nil, location: nil>] >> Article.where(:title => 'Unknown').all => []
⑧更新记录
>> article = Article.first >> article.title = "Rails 4 is great" >> article.published_at = Time.now >> article.save => true
也可以一次性更新多个字段
>> article = Article.first >> article.update_attributes(:title => "RailsConf2013", :published_at => 1.day.ago) => true
或者更新一个字段
>> article = Article.first >> article.update_attribute(:title => "RailsConf2013") => true
⑨删除记录
>> article = Article.last >> article.destroy => #<Article id: 5, title: "Rails Pub Nite", body: "Rails Pub Nite is every 3rd Monday of each month, e...", published_at: "2013-04-13 00:00:00", created_at: "2013-04-13 23:36:07", updated_at: "2013-04-13 23:36:07", excerpt: nil, location: nil> #或者在一行里面操作 >> Article.last.destroy >> Article.destroy(1) => [#<Article id: 1, title: "RailsConf", body: "RailsConf is the official gathering for Rails devel...", published_at: "2010-02-27 00:00:00", created_at: "2010-05-01 23:12:09", updated_at: "2010-05-01 23:12:09", excerpt: nil, location: nil>] #删除多条记录 >> Article.destroy([2,3]) => [#<Article id: 2, ..>, #<Article id: 3, ..>]
使用destroy是没有返回值的,如果需要返回值,我们可以使用delete方法来删除记录
>> Article.delete(4) => 1 #数据库中不存在5到6的记录,所以返回0 >> Article.delete([5, 6]) => 0
规定条件删除相应的记录
>> Article.delete_all("published_at < '2011-01-01'") >> 0