Rails的CRUD

CRUD分别指:C:Create R:Read U:Update D:Delete

描述的思路是通过代码来讲解。

[color=red]C:[/color]
一:基本声明
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


[color=red]R:[/color]
最简单的方式是声明一个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 :order :limit :offset :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这样的属性时,忌用!


[color=red]U[/color]
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 %中国%")


[color=red]D[/color]
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方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值