CRUD分别指:C:Create R:Read U:Update D:Delete
描述的思路是通过代码来讲解。
C:
一:基本声明
an_article = Article.new
an_article.title = "金融危机"
an_article.content = "金融危机之前。。。。。。。。。。。。。。。"
an_article.save
二:代码快声明
Article.new do |a|
a.title = "金融危机"
a.content = "金融危机之前。。。。。。。。。。。。。。。"
a.save
end
三:通过hash声明
an_article = Article.new(:name => "金融危机", :content => "融危机之前。。。。。。。。。。。。。。。")
an_article.save
Active Record为我们自动插入primary key.每次声明完,都调用了.save方法。否则,对象只能存在与内存中,不会保存到数据库。有个“偷懒”的方法,不用显式的调用save方法,采用create 方法。
四:
an_article = Article.create(:name => "金融危机", :content => "融危机之前。。。。。。。。。。。。。。。")
an_article.save
同时,还可以一次Create多个对象
五:
an_article = Article.create([{:name => "金融危机", :content => "融危机之前。。。。。。。。。。。。。。。"} , {:name => "金融危机第二波", :content => "冰岛,韩国,巴基斯坦破产。。。。。。。。。。。。。。。"}])
an_article.save
R:
最简单的方式是声明一个primary key,或者primary keys
Article.find(1)
articles = params[:article_ids];
Article.find(articles)
你也可以根据其他的查询条件,不一定要primary key来实现查询,这时需要用到conditions来实现了。
article = Article.find(:all, :condition => "title='金融危机'")
article = Article.find(:first, :condition => "title='金融危机'")
如果条件是动态的,且有多个条件:则有
params[:cur_date]=Date.today
params[:cur7]=(params[:cur1]-7)
params[:site_id]=session['site_id']
@orders=Order.find(:all,:conditions => ['updated_at = ? and site_id= ? and status=?',params[:cur_date],params[:site_id],params[:status]],:limit=>'4',:order=>'updated_at desc')
模糊查询呢?
@article = Article.find(:all, :condition => ["title like ?", params[:title]+"%"])
看到以上的代码:可以对自己查询出来的结果加上各种各样的设置。主要的参数如下
:conditions
![](/images/smiles/icon_surprised.gif)
rder :limit
![](/images/smiles/icon_surprised.gif)
ffset :joins :select :reandonly :from
:group :lock
至于每个设置如何作用,请大家查看文档。
有的人或许不习惯采用orm这样的查询方式,对原生态sql情有独钟。这时,你可以采用find_by_sql方法。而查询出来结果的处理方式却很不一样。它返回一组模型数组,模型里的属性是查询出来的列组成。
a_articles=Article.find_by_sql(["select a.title,a.content,a.create_at from articles where id=?",params[:id]]);
first = a_articles[0];
first.attributes
first.attribute_names
first.attribute_present?("title")
来判断查询,和显示出来的内容。
rails1.2以来,rails提供了各种统计函数。如有需要,自查资料
很神奇的是:Active Record会根据模型类的属性自动生成find_by_XX,find_all_by_XX系列方法,来实现查询
Article.find_by_title
Article.find_all_by_title
不够需要注意的是:当你表中有xx_xx这样的属性时,忌用!
U
1:当一个对象已经存在时,save就update数据库中的对象。不存在时,就往数据库中插入一条数据.
@article = Article.find(1);
@article.title = "兽首拍卖"
@article.save
2:很多时候,我们更新的只是属性
@article = Article.find(1);
@article.update_attribute(:title,"兽首拍卖")
或者
@article = Article.find(1)
@article.update_attributes(:title=>"兽首拍卖",:content=>"收藏家XXX拍卖,拒绝付款");
或者:通过update方法,将查询和更新一下子完成
Article.update(1,:title=>"兽首拍卖",:content=>"收藏家XXX拍卖,拒绝付款")
同时,也可以批量更新
Article.update_all("update_at = '1998年'","title like %中国%")
D
1:类方法.delete
Article.delete(1)
2:实例方法destroy
@article = Article.find(1);
@article.destroy
3:批量删除
Article.destroy_all("create_at<?",20.days.ago)
Article.delete_all("create_at<?",20.days.ago)
两种方法的区别在于:delete方法直接操作数据库,绕过了Active Record的一些验证。而destroy方法,则保证了调用,一般选用destroy方法