Railsアプリケーションに名前付きスコープを設定しました。これは、ID(インデックスビューから直接)またはUUID(電子メールから-基本的にユーザーがIDを入力できないようにするためのみ)またはUUIDのいずれかによってレコードを検索するために使用されます。レコードを表示)
scope :by_uuid, lambda { |id| where('id = ? OR uuid = ?', id, id) }
これはshowアクションで使用されるため、IDは次のようにURLから取得されます。
services/114
services/74c083c0-8c29-012f-1c87-005056b42f8a
これは、74c083c0-8c29-012f-1c87-005056b42f8aなどのUUIDを取得するまで、うまく機能します。残念ながら、railsはint値に変換され、正しいUUIDを持つレコードと同様にサービス/74を取得します。
スコープに.firstを追加しても、レコードごとに順序が異なる可能性があるため、役に立ちません。そのため、これは機能しません。
レールがこのようにIDを変換し、文字列を文字通り取得するのを防ぐ方法はありますか?明らかに、それに一致するIDを持つレコードはありませんが、渡された文字列の整数値で気ままに行けば、何でも取り戻すことができます。
次のような動的ファインダーの使用
Service.find_by_uuid
また
Service.find_by_id
意図したとおりに機能しますが、同じメソッドでUUIDまたはIDを使用してレコードを取得できる必要があります(show)。
次のようなことをする方法はありますか
Service.find_by_id_or_uuid