论坛首页 编程语言技术论坛

Rails的CRUD

浏览 1987 次
锁定老帖子 主题:Rails的CRUD
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (7)
作者 正文
   发表时间:2009-03-04  
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]+"%"])

看到以上的代码:可以对自己查询出来的结果加上各种各样的设置。主要的参数如下
:conditionsrder :limitffset :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方法



论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics