Ruby on rails 液体模板中的动态url-RubyonRails

Ruby on rails 液体模板中的动态url-RubyonRails,ruby-on-rails,liquid,Ruby On Rails,Liquid,我正在尝试向电子邮件添加动态链接。电子邮件的主体是使用液体模板获取和呈现的 我添加了如下动态链接,但不确定这是否是最优雅的方式。这方面的任何帮助都将是巨大的。以下是代码的相关部分 class UserDrop < Liquid::Drop def search_path ActionController::Base.helpers.content_tag( :a, @user.email, :href => Rails.applicat

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

我添加了如下动态链接,但不确定这是否是最优雅的方式。这方面的任何帮助都将是巨大的。以下是代码的相关部分

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

您可以通过一点继承来彻底解决这个问题:

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 BaseDrop
class UserDrop
感谢@Max提供的解决方案
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