1

Rails 4 の場合: モデルで直接 find() を使用すると、page_translations テーブルのスラッグを検索するクエリが生成されます。

Page.find('my-title')
SELECT FROM "pages" LEFT OUTER JOIN "page_translations" ...
-> #<Page id: 1 ...>

関連付けを介して検索を使用すると、変換テーブルが使用されません。Friendly_id は代わりに元のテーブルを使用します。

@site.pages.find('my-title')
SELECT "pages".* FROM "pages" WHERE "pages"."site_id" = $1 AND "pages"."slug" = 'my-title' LIMIT 1  [["site_id", 1]]
-> ActiveRecord::RecordNotFound

Rails 3.2 (friendly_id 4.0.10、globalize 3.0.0) では、次のように動作します。

@site.pages.find('my-title')
SELECT "pages".* FROM "pages" WHERE "pages"."shop_id" = 1 AND "pages"."slug" = 'my-title' LIMIT 1
SELECT DISTINCT "pages".id, pages.position AS alias_0 FROM "pages" LEFT OUTER JOIN "page_translations" ...
SELECT "pages"."id" AS t0_r0, "pages"."title" AS t0_r1 ... FROM "pages" LEFT OUTER JOIN "page_translations"
-> #<Page id: 1 ...>

https://github.com/norman/friendly_id-globalize/issues/1も参照してください。リポジトリ所有者 @parndt は現在多忙です。したがって、この宝石を機能させるためのヒントは大歓迎です。

4

1 に答える 1