Как использовать set_result с транзакцией в конечной точке (Netzke gem) - PullRequest
2 голосов
/ 17 ноября 2011

Я создал конечную точку для создания нового клиента.

Сначала я создал клиент и использовал транзакцию (см. Код ниже).

Работает нормально.

  # Before add set_result
  js_method :on_new_contact, <<-JS
    function() {
      var form = this.items.first().getForm();
      if (form.isValid()) {
        this.newContact(form.getFieldValues());
        this.closeRes = 'create_user';
        this.close();
      }
    }
  JS

  endpoint :new_contact do |params|
    data_hash = params.to_hash

    Client.transaction do
      new_client = Client.new

      data_hash.each do |field, value|
        new_client.__send__("#{field}=", value)
      end

      if new_client.save!
        flash :notice => "Client #{new_client.full_name} has been created"
      else
        flash :error => new_user.errors.full_messages.to_sentence
      end # if
    end # transaction

    {:netzkeFeedback => @flash}
  end # endpoint

И после того, как я добавлю установленный результат для возврата нового идентификатора клиента из конечной точки.

Это сохраняет новый клиент 3 раза в моей базе данных.

  # After add set_result

  js_method :on_new_contact, <<-JS
    function() {
      var form = this.items.first().getForm();
      if (form.isValid()) {
        this.newContact(form.getFieldValues(), function(value){
            alert(form);
            alert(value);
        }, this);
        this.closeRes = 'create_user';
        this.close();
      }
    }
  JS

  endpoint :new_contact do |params|
    data_hash = params.to_hash

    Client.transaction do
      new_client = Client.new

      data_hash.each do |field, value|
        new_client.__send__("#{field}=", value)
      end

      if new_client.save!
        flash :notice => "Client #{new_client.full_name} has been created"
      else
        flash :error => new_user.errors.full_messages.to_sentence
      end # if
    end # transaction

    {:netzkeFeedback => @flash, :set_result => new_client.id}
  end # endpoint

Я уже пытаюсь найти в чем проблема.

И я обнаружил, что это происходит, когда я использую set_result с транзакцией.

Если я удалю код transaction ИЛИ set_result, он будет работать нормально.

Тогда как я могу заставить это работать?

...