|
|
Line 1: |
Line 1: |
|
| |
|
| == Active Record ==
| |
|
| |
| === Create and Save ===
| |
|
| |
| <source lang="ruby">
| |
| article = Article.new # make an empty object
| |
| article.title = "My Title" # add attributes
| |
| article.author = "Herman"
| |
| article.save # save to database
| |
| </source>
| |
|
| |
| <source lang="ruby">
| |
| article.create(:title => "My Title", :author => "Herman") # make, set attributes, and save
| |
| </source>
| |
|
| |
| <source lang="ruby">
| |
| article.new_record? # new means not saved to database
| |
| </source>
| |
|
| |
| === Find ===
| |
| <source lang="ruby">
| |
| Article.find(3) # look for id = 3
| |
| Article.first # same as Article.find(:first), uses "LIMIT 1" in SQL, so may not be id = 1
| |
| Article.last # same as Article.find(:last)
| |
| Article.all # same as Article.find(:all)
| |
| Article.where(:title => 'RailsConf').first # chaining
| |
| Article.find_by_title('RailsConf') # dynamic finder
| |
| </source>
| |
|
| |
| === Update ===
| |
| <source lang="ruby">
| |
| article = Article.first
| |
| article.title = "Rails 3 is great"
| |
| article.published_at = Time.now
| |
| article.save
| |
| </source>
| |
| <source lang="ruby">
| |
| article = Article.first
| |
| article.update_attributes(:title => "RailsConf2010", :published_at => 1.day.ago) # saves too
| |
| </source>
| |
|
| |
| === Delete ===
| |
| <source lang="ruby">
| |
| Article.find(3).destroy # find, then destroy
| |
| Article.destroy(3) # same thing
| |
| Article.delete(3) # delete directly from database with no object callbacks
| |
| Article.delete_all("published_at < '2011-01-01'") # conditional
| |
| </source>
| |
|
| |
| === Validation and Errors ===
| |
| <source lang="ruby">
| |
| class Article< ActiveRecord::Base
| |
| validates :title, :presence => true
| |
| validates :body, :presence => true
| |
| end
| |
| </source>
| |
|
| |
| <source lang="ruby">
| |
| article = Article.new
| |
| article.errors.any? # false
| |
| article.save # returns false because of validation
| |
| article.errors.full_messages # ["Title can't be blank", "Body can't be blank"]
| |
| article.errors.on(:title) # "can't be blank"
| |
| article.valid? # false
| |
| </source>
| |
|
| |
| === Associations ===
| |
| ==== One-to-one ====
| |
| <source lang="ruby">
| |
| class User < ActiveRecord::Base
| |
| has_one :profile # assumes User.profile_id column
| |
| end # creates User.profile method
| |
| -------------------------------
| |
| class Profile < ActiveRecord::Base
| |
| belongs_to :user # assumes Profile.user_id column
| |
| end # creates Profile.user method
| |
| </source>
| |
|
| |
|
| |
| ==== One-to-many ====
| |
| <source lang="ruby">
| |
| class Message < ActiveRecord::Base
| |
| has_many :attachments # creates Message.attachments method
| |
| end
| |
| -------------------------------
| |
| class Attachment < ActiveRecord::Base
| |
| belongs_to :message # assumes Attachment.message_id column
| |
| end # creates Attachment.message method
| |
| </source>
| |