Перейти к содержимому


Ads
Фотография
- - - - -

как реализовать транзакцию в контроллере?

rails4 ruby on rails ruby on rails 4 ruby

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Забанен
  • 3 429 сообщений

Отправлено 21.06.2015, 21:14

ребят, помогите пожалуйста советом по rails4
 
вот часть контроллера users_controller:
def update
  @user = User.find(params[:id])

  begin
    @user.update_attributes(user_params)
    
    if params[:delete_avatar]
      @user.update_attributes(
        avatar_file_name: nil, 
        avatar_content_type: nil, 
        avatar_file_size: nil
      )
    end

    flash[:success] = t :Profile_updated
    redirect_to @user      
  rescue
    flash[:error] = t :Profile_update_failed
    render  'edit'
  ensure 
    # finally
  end
end

private
  def user_params
    params.require(:user).permit( :name, :email, :diary_name, :password, :gender_id, 
                                  :password_confirmation, :phone, :skype, :info, :avatar, :delete_avatar)
  end 

 

 
 
в блоке begin выполняются 2 действия update_attributes. мне нужно чтобы в случае невыполнения хотя бы одного из них, второе тоже не производило никаких изменений в БД. ну и соответственно после этого отрабатывал бы блок 
flash[:error] = "Profile  updated failed"
render  'edit'
а в случае успешного выполнения обоих отрабатывал бы блок 
flash[:error] = "Profile  updated failed"
render  'edit'

 


"Людей я люблю, но их надо п****ть"©Александр Баширов

#2 majesty

majesty

    хммм..

  • Почетный житель
  • 1 439 сообщений

Отправлено 23.06.2015, 23:00

так не прокатит?

User.transaction do     
    if params[:delete_avatar]
        if @user.update_attributes(user_params) && @user.update_attributes(
            avatar_file_name: nil,
            avatar_content_type: nil,
            avatar_file_size: nil
            )
        then 
            flash[:success] = t :Profile_updated
            redirect_to @user
        else 
            flash[:error] = "Profile  updated failed"
            render  'edit'
            raise ActiveRecord::Rollback
        end
    end      
end    

зы. с руби не знаком


Сообщение отредактировал majesty: 24.06.2015, 00:43


#3 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Забанен
  • 3 429 сообщений

Отправлено 24.06.2015, 00:04

del 


Сообщение отредактировал Sergey Kalinin: 24.06.2015, 00:46

"Людей я люблю, но их надо п****ть"©Александр Баширов





Темы с аналогичным тегами rails4, ruby on rails, ruby on rails 4, ruby

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей