Rails 3

From Wiki
Revision as of 21:01, 28 June 2011 by Scott (talk | contribs)
Jump to navigation Jump to search

Active Record

Create and Save

article = Article.new  # make an empty object
article.title = "My Title"  # add attributes
article.author = "Herman"
article.save  # save to database
article.create(:title => "My Title", :author => "Herman")  # make, set attributes, and save
article.new_record?  # new means not saved to database

Find

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

Update

article = Article.first
article.title = "Rails 3 is great"
article.published_at = Time.now
article.save
article = Article.first
article.update_attributes(:title => "RailsConf2010", :published_at => 1.day.ago)  # saves too

Delete

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

Validation and Errors

class Article< ActiveRecord::Base
    validates :title, :presence => true
    validates :body, :presence => true
end
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

Associations

One-to-one

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


One-to-many

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