【发布时间】:2013-11-21 16:37:06
【问题描述】:
关于这个主题的许多类似 Q/A 在这里和那里,但我无法找到我的问题的确切解决方案。现在使用 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
我还为这个邮件控制器创建了视图,但这并不重要。
来自客户端控制器的片段在这里:
/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',我会得到 'no class or method in ...' 错误,但没有 'x',我只会得到:
UserMailer:Class 的未定义方法 `kokotina'
我还尝试在 UserMailer:Class 中定义我的方法,如下所示:
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”文件的末尾时,就在“module ApplicationHelper”的末尾,我没有收到任何错误,但当然,它不会工作。
请记住,我用其他语言编码没有问题,但是 Ruby on Rails 的这个神秘/神秘的规则对我来说仍然是一个完全的谜团,不幸的是,我没有时间甚至没有动力去阅读大量的时间为 RoR 初学者准备的书籍甚至书籍。我一直在编写更困难的应用程序和实现,但是这个高度区分的系统让我发疯了。
谢谢大家!
【问题讨论】:
标签: ruby-on-rails-3 actionmailer