ruby-on-rails-3 - 自定义辅助方法上的 "undefined method"

标签 ruby-on-rails-3 actionmailer helper

我的 routes.rb 文件中有以下自定义路由:

match '/security_users/:id/email_confirmation/:activation_code' => 'email_confirmation#new'

并且想要创建自定义帮助程序,为指定的SecurityUser生成上述路径。在我的 application_controler.rb 文件中,我有上面的方法:

class ApplicationController < ActionController::Base

  protect_from_forgery

  private

    def email_confirmation_path(security_user)
      "/security_users/#{security_user.id}/email_confirmation/#{security_user.activation_code}"
    end

    helper_method :email_confirmation_path

end

但是当我在/views/security_user_mailer/email_confirmation.text.erb 模板中调用它时,如下所示:

<%= email_confirmation_path(@security_user) %>

我收到以下错误:

NoMethodError at /security_users undefined method `email_confirmation_path' for #<#:0x6340ff53>

你能给点建议吗?

编辑:

下面您可以找到流程工作流程:

首先,创建用户时执行以下行

@security_user.send_email_confirmation

上面的方法在对象模型文件中定义如下:

def send_email_confirmation
  SecurityUserMailer.email_confirmation(self).deliver
end

然后在邮件 Controller 中,调用以下方法:

def email_confirmation(security_user)
  @security_user = security_user
  mail to: security_user.email, subject: 'Account Created'
end

前面的方法是使用我的模板,其中我需要调用自定义路径生成器方法:

<%= email_confirmation_path(@security_user) %>

但我收到错误,它未定义。

最佳答案

Controller 中的帮助程序方法在邮件程序 View 中不可用。您应该将您的方法放入辅助模块中,例如 app/helpers/application_helper.rb:

module ApplicationHelper

    def email_confirmation_path(security_user)
      "/security_users/#{security_user.id}/email_confirmation/#{security_user.activation_code}"
    end

end

然后你应该告诉你的邮件程序类使用该帮助程序模块(假设你的邮件程序是 app/mailers/mailer.rb):

class Mailer < ActionMailer::Base
  add_template_helper(ApplicationHelper)
end

之后,您将能够在邮件程序的 View 中使用该帮助程序。

附:另请注意,Ruby 中的 private 修饰符并不将对方法的访问限制为仅定义该方法的类。子类也可以调用它。 Private 意味着不能像 obj.my_method 这样与对象相关的方法被调用,而只能与 self 相关的隐式调用就像这样my_method

关于ruby-on-rails-3 - 自定义辅助方法上的 "undefined method",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17121406/

相关文章:

ruby-on-rails - 通过公司的Gmail帐户使用ActionMailer

来自 ghci 的 Haskell 命令行帮助

delphi - Delphi Win32 中的类帮助器和字符串

datetime - Rails 中单独的日期和时间表单字段

ruby-on-rails - 为什么 "new"方法保存我的关系而不是仅仅初始化它

ruby-on-rails - 每天向帐户用户发送包含站点更新的电子邮件 Ruby on Rails

ruby-on-rails - 生产中邮件程序中的 Rails4 模板错误

python - Pylons webhelpers 缩小文件名太长

ruby-on-rails - Rails Heroku 数据库人口

ruby-on-rails - 添加到收藏夹(多款)