Rails 3 ActionMailer类已加载,但控制器中没有可用的方法

时间:2013-11-21 16:37:06

标签: ruby-on-rails-3 actionmailer

关于这个主题的许多类似的问答在这里和那里,但我无法找到我的问题的确切解决方案。现在使用Rails 3.0.9,并尝试升级现有的旧应用程序(而不是Rails)。 目标是向管理员创建的新客户发送简单的电子邮件。 一直关注this oficial guide(以及其他许多人),但没有成功。

问题是,该控制器中定义的方法(来自“UserMailer”类)不能从另一个控制器识别,而“UserMailer”类本身被识别出来(我怎么知道这个,将在下面解释) ):

/app/mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  default :from => "info@xxxxx.sk"

  def kokotina # << this is just a dummy method for testing
    caf = "ssss"
  end

  def regMailUsr(nazov, priezvisko, email, pass)
    @nazov = nazov
    @priezvisko = priezvisko
    @email = email
    @pass = pass
    @url = "http://loyalty2.xxxx.sk"
    mail(to: email, subject: 'Vaša registrácia bola dokončená.')
  end
end

我还为这个邮件控制器创建了View,但现在这并不重要。

客户端控制器的片段在这里:

/app/controllers/clients_controller.rb

# encoding: UTF-8

class ClientsController < ApplicationController
  load_and_authorize_resource
.......
  def new
    @noveHeslo = genHeslo(10) # << I defined this in application_controller.rb and it works
    UserMailer.kokotina # << just a dummy method from UserMailer
    @client = Client.new(params[:client])
    .......
  end
.......
  def create
    .......
    if @client.save
      #send email to new client:
      UserMailer.regMailUsr(params[:client][:fname], params[:client][:lname], params[:client][:email], params[:client][:password]).deliver
      .....
  end ......

现在怎么知道我的班级已加载?如果在客户端控制器中,我将'UserMailer'更改为'xUserMailer',我会得到'没有类或方法...'错误,但没有'x',我只得到:

对于UserMailer,

'未定义的方法`kokotina':Class'

我还尝试在UserMailer中定义我的方法:类如下:

def self.kokotina # << this is just a dummy method for testing
  caf = "ssss"
end
#or even like this
def self <<
  def kokotina # << this is just a dummy method for testing
    caf = "ssss"
  end
end
#and then tried to invoke this method(s) like this:
UserMailer.new.kokotina
#or simply
kokotina

奇怪的是,当我把文件'/app/mailers/user_mailer.rb'的内容放在'application_helper.rb'文件末尾时,就在'模块ApplicationHelper'结束之后,我得到的错误是当然,它不会起作用。

请记住,我用其他语言编码没有问题,但Ruby on Rails的神秘/讽刺规则对我来说仍然是一个完全的错误,不幸的是,我没有时间甚至没有动力去阅读时间为RoR初学者提供甚至是书籍。我一直在编写更加困难的应用程序和实现,但是这个极具辨别力的系统让我疯狂。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

问题解决了! 诀窍是,在'/app/mailers/user_mailer.rb'中,我有多字节字符。在邮件主题。 所以我补充道:

#encoding:UTF-8

在'/app/mailers/user_mailer.rb'的第一行

我发现这是完全意外:后来我的rails应用程序无法启动,服务器只是抛出HTTP 500错误。所以没有痕迹,错误定义等。

我发现多字节字符串在: mail(to:email,subject:'Vašaregistráciaboladonončená。')

负责崩溃。当我删除那个字符串时,我注意到一个重要的副作用:我的方法变得魔法可用于另一个控制器!!!!

所以如果有人能给我至少一个理由来降低Rails ......