Почему my: order_token передается как my: order_id при отправке файла формы? - PullRequest
0 голосов
/ 09 января 2019

Issue : я переключил свой "to_param", чтобы переопределить мою идентификационную информацию. Я перебираю приложение, чтобы использовать токен вместо идентификатора, но у меня проблемы с одним контроллером.

У меня есть OrdersController для создания заказов и VideosController, который используется для загрузки видео и принадлежит заказу.

Моя форма :

<%= form_for([@order, @video_order]) do |form| %>
    <%= form.file_field :video, class: "upload" %>
    <%= form.submit %>
<% end %>

Я также пытался использовать скрытое поле для @order.id для :order_id.

Создание контроллеров :

def create

    @video_order = VideoOrder.new(video_order_params)
    @order = Order.find_by(order_token: params[:order_token])

    @video_order.order_id = @order.id *#line_of_error*

    respond_to do |format|
      if @order.video_order.present?
          format.html { redirect_to @order, notice: 'Already complete.' }
          format.json { render :show, status: :created, location: @video_order }
        else

      if @video_order.valid?
        begin

    #stripe_charge_code

              if @video_order.save
                #redirect_code
              end
            end
          end
        end
      end
    end
  end

Когда я иду на загрузку, я получаю сообщение об ошибке :

undefined method `id' for nil:NilClass

Конечно, есть идентификатор для @order. Разве он не должен быть в состоянии найти его, даже если он нашел через :order_token?

На странице ошибки отображается :

"order_id"=>"myG-xffgHUooKrHkg4xgC59tfI_bESGjLHDIQQ" 

который является: order_token для заказа

Это, вероятно, из-за моих маршрутов, которые выглядят так :

resources :orders, param: :order_token
resources :orders do
  resources :video_orders
end

Я также пытался добавить "param: order_token" к сложенным ресурсам, но это не сработало. Кроме того, если я возьму "param: order_token", страница не будет загружаться, потому что она ищет order_token. --- это из-за моей модели заказов ...

Заказ модели (резюме):

validates :order_token, presence: true
  validates :order_token, uniqueness: true

  before_validation :generate_token, on: :create

  def generate_token
    begin
      self.order_token = SecureRandom.urlsafe_base64(28, false)
    end while self.class.find_by(order_token: order_token)
  end

  def to_param
    order_token
  end  

  has_one :video_order

Модель заказа видео:

  belongs_to :order

  validates :order_id, uniqueness: true

Где я тут ошибаюсь?

Почему маркер order_token передается как order_id?

Почему он не находит @ order.id?

Есть ли способ ограничить переопределение моего to_param только указанными методами - я действительно хочу его только для моего метода orders_confirmation?

Как я могу решить эту проблему?

Все работало отлично, прежде чем я обновил модель заказа, добавив токен (как order_token) и обновил маршруты заказов.

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