getty104
@getty104 (Toshifumi Kiyono)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Railsでurl helperのメソッドを他のクラスのクラスメソッドとして扱いたい

Q&A

Closed

Model内などでinclude UrlHelperを行いたくないので、他のクラスにクラスメソッドとして_path_urlメソッドを生やし、それを参照するような形にしようと考えています。

はじめ以下のような実装を行なったところ、うまく行きませんでした

class UrlResolver
  extend Rails.application.routes.url_helpers
end

しかしこれでは動作せず、以下のように実装を変更したところ動作するようになりました。

class UrlResolver
  class << self
    include Rails.application.routes.url_helpers
  end
end

実装はできたものの、動く理由がよくわかっておらずちょっと気持ち悪いなと思っています。

そもそもこのようなケースでの正しい実装方法があるのであればそれが知りたいです!
また、extendでは動かない理由もわかる方は教えていただけるとありがたいです。

2

1Answer

モジュールをincludeしたいわけではない場合ならdelegate_missing_to とかも使えそうだなあとは思いました
https://api.rubyonrails.org/classes/Module.html#method-i-delegate_missing_to

extend で動かないの、 ActiveSupport::Concern 使っていて included とかやってそうなのでその辺の関係ですかねえ (わからないのがわかる)
https://github.com/rails/rails/blob/5394c94a2b8fa3b24893f00b2fc20d6554bf31c9/actionpack/lib/action_dispatch/routing/route_set.rb#L490-L577

1Like

Comments

  1. @getty104

    Questioner

    ありがとうございます!
    delegate_missing_toを使うのは良さそうですね
    毎回はまりがちなので理解したい...

Your answer might help someone💌