2012-07-03 4 views
6

Учитывая следующий код:Действия контроллера Rails неявно определяют транзакционные облигации?

def create 
    @something = Something.new(params[:something]) 
    thing = @something.thing # another model 

    # modification of attributes on both 'something' and 'thing' omitted 

    # do I need to wrap it inside a transaction block? 
    @something.save 
    thing.save 
end 

создать ли метод быть завернутым в ActiveRecord сделке неявно, или мне нужно, чтобы обернуть его в блок транзакции? Если мне нужно обернуть его, это лучший подход?

ответ

4

Краткий ответ: вам необходимо явно обернуть свой код в блок транзакций. В основном вы должны использовать транзакции, если хотите выполнить группу операторов SQL, чтобы поддерживать ссылочную целостность.

Something.transaction do 
    @something.save 
    thing.save 
end 

Дальнейшее чтение: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

Смежные вопросы