Rails 3 Model: Difference between revisions
Jump to navigation
Jump to search
Created page with ' == Create and Save == <source lang="ruby"> article = Article.new # make an empty object article.title = "My Title" # add attributes article.author = "Herman" article.save # …' |
|||
Line 76: | Line 76: | ||
</source> | </source> | ||
==== has_one automatic methods ==== | |||
<source lang="ruby"> | |||
user.profile #=> #<Profile id: 2, user_id: 1, ...> | |||
user.profile.nil? #=> false | |||
user.build_profile(:bio => 'eats leaves') #=> #<Profile id: nil, user_id: 1, ...> # not automatically saved | |||
user.create_profile(:bio => 'eats leaves') #=> #<Profile id: 3, user_id: 1, ...> # automatically saved | |||
</source> | |||
==== has_one options ==== | |||
<source lang="ruby"> | |||
has_one :profile, :class_name => 'Account' | |||
has_one :profile, :conditions => "active = 1" | |||
has_one :profile, :foreign_key => 'account_id' | |||
has_one :profile, :order => "created_at DESC" | |||
has_one :profile, :dependent => :destroy # call destroy on user when profile is destroyed, also ":delete" and ":nullify" | |||
</source> | |||
=== One-to-many === | === One-to-many === |
Revision as of 21:13, 28 June 2011
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
has_one automatic methods
user.profile #=> #<Profile id: 2, user_id: 1, ...>
user.profile.nil? #=> false
user.build_profile(:bio => 'eats leaves') #=> #<Profile id: nil, user_id: 1, ...> # not automatically saved
user.create_profile(:bio => 'eats leaves') #=> #<Profile id: 3, user_id: 1, ...> # automatically saved
has_one options
has_one :profile, :class_name => 'Account'
has_one :profile, :conditions => "active = 1"
has_one :profile, :foreign_key => 'account_id'
has_one :profile, :order => "created_at DESC"
has_one :profile, :dependent => :destroy # call destroy on user when profile is destroyed, also ":delete" and ":nullify"
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