Отдельные действия по обновлению для разных параметров в контроллере? - PullRequest
0 голосов
/ 21 ноября 2018

(сообщение обновлено ниже)

Моя проблема: Требуется ли отдельное действие обновления для различных параметров в моем контроллере.Мне нужны общие действия обновления для параметров (минус параметры в отдельных действиях / методах обновления), действие обновления для: видео и действие обновления для: order_status

Вопрос: Как можноЯ эффективно выполняю несколько операций обновления в моем контроллере?

Вот идея того, чего я хочу, и она не работает:

  def charge_update
    respond_to do |format|
      @amount = (@order.order_price).to_i * 100
      @amount_seller = (@order.order_price).to_i * 75
      if @order.update(order_charge)
        if user_signed_in? && user.seller?
                      charge = Stripe::Charge.create({
                        :amount      => (@order.order_price).to_i * 100,
                        :description => 'Rails Stripe customer',
                        :currency    => 'usd',
                        :customer => @order.stripe_customer_token,
                        :destination => {
                          :amount => @amount_seller ,
                          :account => (@order.seller.stripe_token),
                        }
                      })
          @order.order_status = "charged"
          format.html { redirect_to ([@user, @order]), notice: 'Order was successfully uploaded.' }
          format.json { render :show, status: :ok, location: @order }
        else
          format.html { render :edit }
          format.json { render json: @order.errors, status: :unprocessable_entity }
        end
      end
    end
  end

  def cancel_update
    respond_to do |format|
      if @order.cancel_update(order_update)
        if user_signed_in?
          if @order.order_status = "cancelled"

            format.html { redirect_to @order, notice: 'Order was successfully cancelled.' }
            format.json { render :show, status: :ok, location: @order }
          else
            format.html { render :edit }
            format.json { render json: @order.errors, status: :unprocessable_entity }
          end
        end
      end
    end
  end

  def update
    respond_to do |format|
      if @order.update( order_params.except(:order_status) )
        if user_signed_in?
          format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
          format.json { render :show, status: :ok, location: @order }
        else
          format.html { render :edit }
          format.json { render json: @order.errors, status: :unprocessable_entity }
        end
        if buyer_signed_in?
          format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
          format.json { render :show, status: :ok, location: @order }
        else
          format.html { render :edit }
          format.json { render json: @order.errors, status: :unprocessable_entity }
        end
      end
    end
  end

private

    def order_params
      params.require(:order).permit(:name, :email, :image,:description)
    end

    def order_status
      params.require(:order).permit(:order_status)
    end

    def order_charge
      params.require(:order).permit(:video)
    end
...

Мои проблемы с тем, что мне нужно сделать:

Я хочу отдельное действие для случая, когда изменяется order_status, для каждого значения.Самое главное, я хочу, чтобы определенное сообщение отображалось в зависимости от значения, на которое изменяется столбец order_status.

Наиболее важный вопрос:

Мне нужно отдельное действие обновления для взимания платы с клиентов.Это наиболее важно, потому что я не могу просто выставить счет клиенту, когда кто-то обновляет имя, или когда продавец обновляет статус заказа и т. Д.

Я делаю что-то не так или мне нужно настроитьмаршруты, чтобы иметь возможность разрешить несколько действий обновления?

Так как я могу разделить обновления и параметры?

ОБНОВЛЕНИЕ

Я встроил методы обновления в один оригинальный метод, например ...

, но у меня есть одна проблема, уведомления о сообщениях выглядят некорректно с параметром обновления.Появится сообщение «Заказ был успешно обновлен», который не настроен для того, когда я загружаю видео или изменяю столбец ordeR_status

  def update
    respond_to do |format|
      if params["order_status"]
        if user_signed_in?
          format.html { redirect_to ([@user, @order]), notice: 'Order was successfully order_status.' }
          format.json { render :show, status: :ok, location: @order }
        else
          format.html { render :edit }
          format.json { render json: @order.errors, status: :unprocessable_entity }
        end
      end
        if params["video"]
          @amount = (@order.order_price).to_i * 100
          @amount_seller = (@order.order_price).to_i * 75
          if @order.update(order_charge)
            if user_signed_in? && user.seller?
                          charge = Stripe::Charge.create({
                            :amount      => (@order.order_price).to_i * 100,
                            :description => 'Rails Stripe customer',
                            :currency    => 'usd',
                            :customer => @order.stripe_customer_token,
                            :destination => {
                              :amount => @amount_seller ,
                              :account => (@order.seller.stripe_token),
                            }
                          })
              @order.order_status = "charged"
              format.html { redirect_to ([@user, @order]), notice: 'Order was successfully uploaded.' }
              format.json { render :show, status: :ok, location: @order }
            else
              format.html { render :edit }
              format.json { render json: @order.errors, status: :unprocessable_entity }
            end
          end
        end
        if @order.update(order_params)
          if user_signed_in?
            format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
            format.json { render :show, status: :ok, location: @order }
          else
            format.html { render :edit }
            format.json { render json: @order.errors, status: :unprocessable_entity }
          end
          if buyer_signed_in?
            format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
            format.json { render :show, status: :ok, location: @order }
          else
            format.html { render :edit }
            format.json { render json: @order.errors, status: :unprocessable_entity }
          end
        end
      end
    end

Итак, у меня сейчас две проблемы:

  1. В настраиваемых сообщениях не отображается
  2. , и в соответствии с: video param update, я хочу, чтобы статус заказа изменил «заряженный», но то, что у меня сейчас есть, не делаетэто

У кого-нибудь есть идеи, как это улучшить?

1 Ответ

0 голосов
/ 21 ноября 2018

Это, кажется, решило это до сих пор.:::

def update
    respond_to do |format|
      if @order.update(order_status)
        if user_signed_in?
          format.html { redirect_to ([@user, @order]), notice: 'Order was successfully order_status.' }
          format.json { render :show, status: :ok, location: @order }
        else
          format.html { render :edit }
          format.json { render json: @order.errors, status: :unprocessable_entity }
        end
      end
        if @order.update(order_charge)
          @amount = (@order.order_price).to_i * 100
          @amount_seller = (@order.order_price).to_i * 75
          if @order.update(order_charge)
            if current_user.seller?
                          charge = Stripe::Charge.create({
                            :amount      => (@order.order_price).to_i * 100,
                            :description => 'Rails Stripe customer',
                            :currency    => 'usd',
                            :customer => @order.stripe_customer_token,
                            :destination => {
                              :amount => @amount_seller ,
                              :account => (@order.seller.stripe_token),
                            }
                          })
              @order.order_status = "charged"
              format.html { redirect_to ([@user, @order]), notice: 'Order was successfully uploaded.' }
              format.json { render :show, status: :ok, location: @order }
            else
              format.html { render :edit }
              format.json { render json: @order.errors, status: :unprocessable_entity }
            end
          end
        end
        if @order.update(order_params)
          if user_signed_in?
            format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
            format.json { render :show, status: :ok, location: @order }
          else
            format.html { render :edit }
            format.json { render json: @order.errors, status: :unprocessable_entity }
          end
          if buyer_signed_in?
            format.html { redirect_to ([@user, @order]), notice: 'Order was successfully updated.' }
            format.json { render :show, status: :ok, location: @order }
          else
            format.html { render :edit }
            format.json { render json: @order.errors, status: :unprocessable_entity }
          end
        end
      end
    end

private

    def order_params
      params.require(:order).permit(:name, :email, :image, :video, :description)
    end

    def order_status
      params.require(:order).permit(:order_status)
    end

    def order_charge
      params.require(:order).permit(:video)
    end
end

Если кто-то увидит это и решит, что у него есть лучший способ, пожалуйста, дайте мне знать.Я не уверен, насколько это удобно или эффективно (объединение всех в один метод и т. Д.), Но, похоже, это работает.Моя единственная проблема заключается в том, что

  1. Когда я изменяю order_status для отмены, сообщение не появляется, но оно работает.

  2. , когда я изменяю заполнить видеоparam, появляется сообщение order_status.Что я понимаю, но я не понимаю, почему оно не появится, когда я изменю статус на отмену - и, кстати, отмена - это перечисление «2».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...