2

フレンドリIDを使用して、より多くのカスタムURLを作成しようとしています。ただし、スラッグに使用したい列はまだ数字です。スラッグのためだけに別の列を作成したくありません。同じになるからです。

オークションに属するロットがあります。オークションにはたくさんのロット(売り物)があります。

ロットには、オークションlot_numberに固有のがあります。ただし、テーブル全体で一意ではありません。これは基本的に、各オークションでロットを注文する方法にすぎません。

私のURLは次のようになります:/ auctions / 1 / lots / 21(/ auctions /:auction_id / lots /:id)
次のようにします:/ auctions / 1 / lots / 1(/ auctions /:auction_id / lots /:lot_number )。

lot.rbに以下を追加しました:

extend FriendlyId
friendly_id :lot_number

それはほとんど動作します。正しいロット番号のロットが表示されますが、オークションが間違っています。
私はFriendlyIDのドキュメントでスコープについて読みましたが、これは完璧に聞こえました。私はオークションに対して多くのスコープを設定することができました...
それで私は試しました:

extend FriendlyId
friendly_id :lot_number, :use => :scoped, :scope => :auction_id

次のエラーが表示されます。

SQLite3::SQLException: no such column: lots.slug: SELECT  "lots".* FROM "lots"  WHERE "lots"."slug" = '1' LIMIT 1

SQLはなぜWHERE lots.slug = 1ですか?そうではないWHERE lots.auction_id = 1ですか?
間違った構文を使用していますか?どこが間違っているのかわからない。

どんな助けでもいただければ幸いです。ありがとう。

4

1 に答える 1

0

Rails で使用されているメソッドを参照してモデルを検索from_paramする必要があると思います: http://apidock.com/rails/ActiveRecord/Base/to_paramto_param

于 2013-02-17T18:15:27.447 に答える