Rails 3 - обновление родительского класса - PullRequest
0 голосов
/ 23 апреля 2011

В моем приложении есть класс Trans (транзакция), который отправляет транзакцию на сервер.Когда транзакция отправляется, я также хочу обновить родительский класс User, чтобы обновить их кэшированный «баланс».Вот соответствующий код:

# tran.rb
class Tran < ActiveRecord::Base
    belongs_to :submitting_user, :class_name => 'User'
end

И мой контроллер:

#trans_controller.rb
def create
        @title = "Create Transaction"

        # Add the transaction from the client
        @tran = Tran.new(params[:tran])

        # Update the current user
        @tran.submitting_user_id = current_user.id

        # ERROR: This line is not persisted
        @tran.submitting_user.current_balance = 4;

        # Save the transaction
        if @tran.save
            flash[:success] = 'Transaction was successfully created.'
            redirect_to trans_path

У меня есть пара проблем:

  1. При обновлении поля current_balanceпользователь, этот баланс не сохраняется на пользователя после сохранения транзакции.Я думаю, может быть, мне нужно использовать update_attributes?
  2. Я даже не уверен, что код должен быть частью моего контроллера - возможно, это имеет больше смысла в before_save моей модели?
  3. Будет ли любой из них совершать эту транзакцию?

1 Ответ

1 голос
/ 23 апреля 2011
def create
  title = "Create Transaction"
  @tran = Tran.new(params[:tran])
  @tran.submitting_user_id = current_user.id
  # to make it "transactional" you should put it after @tran.save
  if @tran.save
    current_user.update_attribute :current_balance, 4
    ...

И да - лучше поместить его в after_save обратный вызов

class Tran < AR::Base
  after_save :update_user_balance

  private
  def update_user_balance
    submitting_user.update_attribute :current_balance, 4
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...