Friendly_id があるアクションでは機能し、別のアクションでは失敗するのはなぜですか
-
21-12-2019 - |
質問
私の中にいくつかのカスタムアクションがあります orders_controller.rb
:
class OrdersController < ApplicationController
def process_payment
@order = Order.friendly.find(params[:id])
[snip]
binding.pry_remote # drops into the terminal here for debugging
redirect_to order_path(@order)
[snip]
end
end
Testivate::Application.routes.draw do
resources :orders do
member do
get :pay
post :process_payment
end
end
end
ターミナル内で次のことがわかります。 @order#process_payment
アクション、 friendly_id
は働いている:
[1] pry(#<OrdersController>)> @order
+----+-------+-------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| id | co... | url | comp | comp | comp | us... | gu... | gu... | cr... | up... | pr... | uuid | sp... | payed |
+----+-------+-------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| 1 | Th... | ht... | http | http | http | 1 | | | 20... | 20... | 1 | ee... | true | false |
+----+-------+-------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
1 row in set
[2] pry(#<OrdersController>)> @order.uuid
=> "ee1bbe01-e1ca-420c-991b-76ce90525cf8"
[3] pry(#<OrdersController>)> request.original_url
=> "http://127.0.0.1:4000/orders/ee1bbe01-e1ca-420c-991b-76ce90525cf8/process_payment"
[4] pry(#<OrdersController>)> order_path(@order)
=> "/orders/ee1bbe01-e1ca-420c-991b-76ce90525cf8"
でもいつ @order#process_payment
にリダイレクトしようとします @order#show
, 、失敗します。
エラーが発生します:
ActiveRecord::RecordNotFound at /orders/ee1bbe01-e1ca-420c-991b-76ce90525cf8
Couldn't find Order with id=ee1bbe01-e1ca-420c-991b-76ce90525cf8
しかし、奇妙なことに、このエラーはRailsが完了しようとする前に発生するようです @order#show
, 、私の端末にドロップダウンすることはありません。 @order#show
アクション:
class OrdersController < ApplicationController
def show
binding.pry_remote # should drop down to terminal here for debugging, but we never get this far
@order = Order.friendly.find(params[:id])
respond_with @order
end
end
どうしてこれなの?
関連する可能性のあるその他のコード:
class Order < ActiveRecord::Base
extend FriendlyId
friendly_id :uuid
after_create :generate_uuid
def generate_uuid
self.update_attributes :uuid => SecureRandom.uuid
end
end
Rails 4.0.2 と Friendly_id 5.0.3 を使用します。
解決
friendly_id :uuid, use: [:slugged, :finders]
これは基本的にデフォルトを設定します find
標準の両方を探すRailsのメソッド id
そしてその slug
. 。これであなたの問題は解決すると思います
所属していません StackOverflow