Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
save обычно используется вместе с if, и по else идет рендер страницы с ошибками:if user.save
redirect_to user_path(user)
else
render 'edit'
end
# или так:
user.save
if user.errors.any?
# ...
save! в этом случае покажет пользователю страницу ошибки.save!, а если обрабатываете, то save.#псевдокод
class Migration < BaseMigration
class User < AR::Base
end
def up
User.update_all smth: 123
end
def down
end
end
enum надо использовать для значений, у которых хорошо выражена численная природа. Но позвольте, что тогда не так с обычными числами?enum это числа — деталь реализации (см. конец первого абзаца), обязательной чертой перечисляемого типа является только отношение эквивалентности, но не порядка. Просто компьютеры привыкли к числам и могут их обрабатывать быстрее всего.self.foo — вызов метода, который может являться геттером атрибута @foofoo — вызов метода, который может являться геттером атрибута @foo@foo — чтение атрибута (переменной экземпляра)self.foo необходимо использовать при присвоении. Это так, потому что foo = 5 это создание и присвоение локальной переменной. А self.foo = 5 это вызов writer-метода foo=(5).unless хорош, когда после него только одно выражение (без && или ||)class Foo
private
def self.bar
puts 'bar'
end
end
Foo.bar # => bar
def agent
agent = Mechanize.new
agent.user_agent = 'Mozilla'
agent
end
def agent
Mechanize.new.tap { |agent| agent.user_agent = 'Mozilla' }
end
yeild self if block_given? внутри метода initialize инстанцируемого объекта.
def agent
Mechanize.new { |agent| agent.user_agent = 'Mozilla' }
end
find_by_id(value), а find_by(id: value), лучше читается, когда полей для поиска несколько (сравните find_by_name_and_surname(v1, v2) и find_by(name: v1, surname: v2)).Creating a cascading foreign keygenerates:add_foreign_key :articles, :authors, on_delete: :cascade
ALTER TABLE "articles" ADD CONSTRAINT articles_author_id_fk FOREIGN KEY ("author_id") REFERENCES "authors" ("id") ON DELETE CASCADE
10 ошибок в Ruby / Ruby on Rails, которые легко исправить