液体模板中的动态 url - Ruby 在 Rails

Dynamic url in liquid template - Ruby On Rails

我正在尝试向电子邮件添加动态 link。电子邮件正文是使用液体模板获取和呈现的。

我添加了动态 link 如下,但不确定这是否是最优雅的方式。在这方面的任何帮助都会很棒。下面是代码的相关部分。

class UserDrop < Liquid::Drop
  def search_path
    ActionController::Base.helpers.content_tag(
      :a,
      @user.email,
      :href => Rails.application.routes.url_helpers.admin_users_url(
        search: @user.email,
        host: Rails.application.config.action_mailer.default_url_options[:host])
    )
  end
end

液体模板代码

Email: {{user.search_path}}

你真的可以通过继承来解决这个问题:

class BaseDrop < Liquid::Drop
  # shamelessly stolen from
  # http://hawkins.io/2012/03/generating_urls_whenever_and_wherever_you_want/
  class Router
    include Rails.application.routes.url_helpers

    def self.default_url_options
      ActionMailer::Base.default_url_options
    end
  end

  private
  def router
    @router ||= Router.new
  end

  def helpers
    @helpers ||= ActionController::Base.helpers
  end
end
class UserDrop < BaseDrop
  def search_path
    helpers.link_to(@user.email, router.admin_users_url(search: @user.email))
  end
end