ActiveRecord(一)--基础

   这一篇主要讲:如何连接到数据库,如何映射表,以及如何处理数据。

  ActiveRecord采用了标准的对象-关系映射(ORM)层,表映射到类,记录映射到对象,字段映射到对象的属性。

   1,表和类

         ActiveRecord会认为表名应该是类名的复数形式,如果类名包含多个大写字母,表名中就应该用下划线分割多个单词,一些特殊的复数形式也会被自动处理。

      (DHH的理念:类名应该是单数形式,表名应该是复数形式。为什么这样呢?因为听起来跟符合人命的习惯。我们的目标是创建一种领域语言,让它成为编程语言与口头语言时间的桥梁...如果遵循标准的命名约定,可以省掉大部分的配置。)

    如果不喜欢这种方式可以自己设定:

    (1)

 class user < ActiveRecord:Base
     set_table_name "user"    #not "users" 
  end

 (2)

 

class User < ActiveRecord:Base
  self.table_name = "user" 
end

 (3)此外,也可以在配置文件中配置

 

config.active_record.pluralize_table_names = true|false

   如果为false,表名与模型类名一致,而不是后者的复数形式。

 

2,字段和属性

      属性在哪里?数据库结构可以看作模型定义的一部分。

     优点:体现了DRY(Don't Repeat Yoursef)原则,如果模型添加一个属性,只需要新建一个数据迁移任务,然后重新加载应用程序,不需要对代码做任何修改。

 

     注意:如果要查询一个boolean型字段的状态,就必须在字段名的后面加问号。

3,主键与Id

    在ActiveRecord中,主键字段在对象中的属性名称永远都是id。

   primary_key= 声明只是用于指定数据库表中的主键字段。

4, 连接数据库

   修改config/database.yml就可以了。

如果有特殊需要,可以用establist_connection方法。

ActiveRecord::Base.establist_connection(

   :adapter => "mysql",

   :host => "",

   :database  => "",
   :username => "",
   :password => ""

)

 也可以对某个model用establish_connection

class Customer < ActiveRecord::Base
   establist_connection(

       :adapter => "mysql",
      :host => "",
      :database  => "",
      :username => "",
      :password => ""
   )
end

 5,curd

   (1)新增记录

 

user = User.new
user.name = "wade"
user.save

  或

user  = User.create(:name => "wade")

      save与create的区别?

      save和new()搭配使用,create()则同时完成“实例化模型对象”和“将模型对象存入数据库”的操作。

 (2)读取现有记录

      ActiveRecord如何操作数据库?

     动态生成sql语句,底层执行查询操作,把查询结果包装成存放对象的数组

 (3)更新现有记录

 

order = Order.find(123)
order.name = "wade"
order.save

 

#更新某几个特定字段的值
user = User.find(123)
user.update_attribute(:name,"mengwade')

 

#用于将来自表单的数据更新到一条已有的数据库记录
user = User.find(123)
user.update_attrubutes(:name => "mengwade",
                                       :email => "[email protected]")

 

#“读取数据”与“更新数据”合二为一
user = User.update(123,:name => "mengwade",
                                       :email => "[email protected]")

 

#适用于批量更新,可以指定set和where字句
result = Product.update_all("price=1.1*price","title like '%ruby%'")

 (4)删除记录

 

product.delet(12)

product.delete([12,13])

 

Product.delete_all(["price > ?",1])
 
product = Product.find_by_title("ruby")
product.destroy

 

Product.destroy(12)
Product.destroy([12,13])
 
Product.destroy_all(["price > ?",100])

 d elete()和destroy()的区别?

 delete()方法绕过了ActiveRecord的回调和验证,而destroy()可以确保进行模型类中定义的业务规则检查,以保证数据的完整性

你可能感兴趣的:(ruby,on,rails)