5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Hanami::Repositoryが参照するテーブル名をデフォルトから変えたい時

Last updated at Posted at 2018-07-23

Hanamiを使っているとRepositoryが自動で設定してくれるテーブル名を変更したい時があります。

対応

class HogeRepository < Hanami::Repository
  self.relation = :t_hoges
end

HogeRepository.new.t_hoges.where(id: 1)
# => [sample] [INFO] [2018-07-23 22:56:27 +0900] (0.000640s) SELECT `id` FROM `t_hoges` WHERE (`id` = 1) ORDER BY `t_hoges`.`id`

Hanami::Repository.relationを上書きすることで対応可能です。

私の場合

Hanami::Repositoryが推測してくれるテーブル名はHanami::Utils::String.pluralizeというメソッドによって実装されているのですが、こいつが時たま「マジかっ」って変換をします。

irb(main):003:0> Hanami::Utils::String.pluralize('fee')
=> "fees"
irb(main):004:0> Hanami::Utils::String.pluralize('original_fee')
=> "original_ves"

こういうやつ。

このままだと
FeeRepositoryはfeesテーブルを参照するのに、
OriginalFeeRepositoryはoriginal_vesテーブルを参照してしまいますね。

feeに接頭語をつけると複数形が変化してしまうんですね。

言語的に何が正しいのかまでは分からないのですが、
私の場合は、接頭語がつく時とつかない時も同じようにfeesを参照して欲しかったので、
Hanami::Repository.relationを上書きすることで無事に対応できましたとさ。

リスク

Hanami::Repository.relationを上書きする

という対応はHanamiの公式ドキュメントには載っていない方法です。
hanami/repository.rb#L281らへんにできる風なコメントは書いてありますが、後々変更されるリスクはあると思います。

こういったリスクを取りたくない場合は、素直にHanamiが設定するテーブル名にすることがよいかと思われます。
モデルの名前を変更するのも一案ですね。

マサカリ歓迎です。コメントください!

以上。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?