rails ActiveRecord

go to rails api: http://api.rubyonrails.org/

go to ActiveRecord::Base

see method  find/new/save

find(* args) 
Find operates 
with
 three different retrieval approaches: 

Find by id: This can either be a specific id (
1), a list of ids (156), or an array of ids ([5610]). If no record can be found for all of the listed ids, then
 RecordNotFound will be raised. 
Find first: This will 
return the first record matched by the options used. These options can either be specific conditions or merely an order. If no record can be matched, nil is
 returned. 
Find all: This will 
return all the records matched by the options used. If no records are found, an empty array is
 returned. 
All approaches accept an options hash 
as
 their last parameter. The options are: 

:conditions: An SQL fragment like 
"administrator = 1" or [ "user_name = ?", username ]. See conditions in
 the intro. 
:order: An SQL fragment like 
"created_at DESC, name"

:group: An attribute name by which the result should be grouped. Uses the GROUP BY SQL
-
clause. 
:limit: An 
integer determining the limit on the number of
 rows that should be returned. 
:offset: An 
integer determining the offset from where the rows should be fetched. So at 5, it would skip rows 0 through 4

:joins: Either an SQL fragment 
for additional joins like "LEFT JOIN comments ON comments.post_id = id" (rarely needed) or named associations in the same form used for the :include option, which will perform an INNER JOIN on the associated table(s). If the value is a stringthen the records will be returned read-only since they will have attributes that do not correspond to the table‘s columns. Pass :readonly => false to
 override. 
:include: Names associations that should be loaded alongside 
using LEFT OUTER JOINs. The symbols named refer to
 already defined associations. See eager loading under Associations. 
:
select: By default, this is * as in SELECT * FROM, but can be changed if you, for example, want to do a join but not
 include the joined columns. 
:from: By 
default, this is the table name of the 
class, but can be changed to an alternate table name (or even the name of a database view). 
:
readonly: Mark the returned records read-only so they cannot be saved or
 updated. 
:
lock: An SQL fragment like "FOR UPDATE" or "LOCK IN SHARE MODE". :lock => true gives connection‘s default exclusive lock, usually "FOR UPDATE"

Examples 
for
 find by id: 

  Person.find(
1)       # returns the object for ID = 1

  Person.find(
126) # returns an array for objects with IDs in (126)
  Person.find([
717]) # returns an array for objects with IDs in (717
)
  Person.find([
1])     # returns an array for the object with ID = 1

  Person.find(
1, :conditions => "administrator = 1", :order => "created_on DESC")
Note that returned records may 
not be in the same order as the ids you provide since database rows are unordered. Give an explicit :order to
 ensure the results are sorted. 

Examples 
for
 find first: 

  Person.find(:first) # returns the first 
object fetched by SELECT *
 FROM people
  Person.find(:first, :conditions 
=> [ "user_name = ?"
, user_name])
  Person.find(:first, :order 
=> "created_on DESC", :offset => 5
)
Examples 
for
 find all: 

  Person.find(:all) # returns an array 
of objects for all the rows fetched by SELECT *
 FROM people
  Person.find(:all, :conditions 
=> [ "category IN (?)", categories], :limit => 50
)
  Person.find(:all, :offset 
=> 10, :limit => 10
)
  Person.find(:all, :include 
=>
 [ :account, :friends ])
  Person.find(:all, :group 
=> "category"
)
Example 
for find with a lock. Imagine two concurrent transactions: each will read person.visits == 2, add 1 to it, and save, resulting in two saves of person.visits = 3. By locking the row, the second transaction has to wait until the first is finished; we get the expected person.visits == 4


  Person.transaction 
do

    person 
= Person.find(1, :lock => true)
    person.visits 
+= 1

    person.save!
  
end

 

 

new(attributes = nil) {|self if  block_given?| ...} 
New objects can be instantiated as either empty (pass no construction parameter) or pre-set with attributes but not yet saved (pass a hash with key names matching the associated table column names). In both instances, valid attribute keys are determined by the column names of the associated table — hence you can‘t have attributes that aren‘t part of
 the table columns. 

[ hide source ]

      # File vendor
/rails/activerecord/lib/active_record/base.rb, line 1921

1921:       def initialize(attributes =  nil)
1922:         @attributes =
 attributes_from_column_definition
1923:         @attributes_cache =
 {}
1924:         @new_record = true

1925 :         ensure_proper_type
1926:         self.attributes =
 attributes unless attributes.nil?
1927:         self.class.send(:scope, :create).each { |att,value| self.send("#{att}=", value) } if
 self.class.send(:scoped?, :create)
1928:         result = yield self if
 block_given?
1929:         callback(:after_initialize) if
 respond_to_without_attributes?(:after_initialize)
1930
:         result
1931:       end

 

save() 
No record exists: Creates a 
new record with values matching those of the object
 attributes. 
A record does exist: Updates the record 
with values matching those of the object
 attributes. 
[ hide source ]

      # File vendor
/rails/activerecord/lib/active_record/base.rb, line 1971

1971 :       def save
1972
:         create_or_update
1973:       end

 access the model's attributes:

 use attribute_names/attributes 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值