ActiveRecord

Нистратов Артём

anistratov@go-promo.ru

rails g model Snippet title:string content:text
rails g scaffold

generator

model name

attribute name

attribute type

code = Snippet.new title: 'Test', content: 'a = :foo'
code.new_record?
code.save
code.id
code.persisted?
rails console

Create

h = {}
h = Hash.new
h[:foo] = 'bar'
h[:foo]
'bar'
h[:baz]
nil
h['key'] = 1

Hash

Snippet.new title: 'Test'
Snippet.new(title: 'Test')
params = { title: 'Test' }
Snippet.new params
Snippet.new({ title: 'Test' })

Method calls

code = Snippet.new
code.save
Snippet.create
git add -A
git commit -m "add Snippet model"
git checkout -b snippets

new branch name

git push origin snippets

server

branch

Snippet.find(1)
Snippet.where(title: 'Test').first
Snippet.select([:content])
    .where(title: 'Test')
    .order(:created_at)
    .limit(1)

Read

Snippet.limit(10).pluck(:content)

Query API

.where(is_draft: false)
.where('is_draft = ?', false)
.where('is_draft = :draft',
    draft: false)
.where("is_draft = #{params[:draft]}")
rails g model User name:string
rails g migration AddUserIdToSnippet user_id:integer
rake db:migrate

Relations

class User < ActiveRecord::Base
  has_many :snippets
end
class Snippet < ActiveRecord::Base
  belongs_to :user
end
Snippet.joins(:user)
    .where(user: { name: 'John' })
    .count
User.joins(snippets: :languages)
    .where(languages: { name: 'Ruby' })
    .take(10)
rails g model Language name:string
rails g migraion CreateSnippetsLanguages \
  snippet_id:integer language_id:integer
has_and_belongs_to_many :snippets

Update

snippet.content = 'Some information'
snippet.save
snippet.updated_at
snippet.update_attributes(title: 'Yay')
snippet.assign_attributes(content: '._.')
snippet.changed
snippet.changes

Delete

snippet.destroy
Snippet.destroy(ids)
Snppet.where(title: 'Test').destroy_all
Snippet.where(title: nil).each { |post| post.destroy }
Snippet.where(...).find_each { |code| ... }

Enumerator

[1, 2, 3].each { |i| puts i * 2 }
[1, 2, 3].each do |i|
    puts i * 2
end
array.map { |value| ... }
    .sort.reverse.with_index
    .reduce do |result, (value, index)| 
        ...
    end

second

By adone

second

  • 880