我对铁轨比较陌生,而且我正忙着把很多东西包裹起来。但现在主要是ActionMailer。我试图建立一个联系我们的表格。
我目前收到此错误
NoMethodError in ContactsController#new
private method `new' called for Contact:Class
def new
@contact = Contact.new
end
这是我的邮件/ contact.rb
1 class Contact < ActionMailer::Base
2 default from: "my@email.com"
3
4
5 def contact_us(subject)
6 mail(to: 'my@email.com', subject: subject)
7 end
8
9 end
这是我的contacts_controller.rb
1 class ContactsController < ApplicationController
2 def new
3 @contact = Contact.new
4 end
5
6 def create
7 @contact = Contact.new(contact_params)
8 #Tell the contact model to send contact_us
9 if Contact.contact_us(subject).deliver
10 flash.now[:error] = nil
11 flash.now[:notice] = 'Thank you for your message!'
12 else
13 flash.now[:error] = 'Cannot send message.'
14 render :new
15 end
16 end
17 private
18 def contact_params
19 params.require(:contact).permit(:name, :email, :message)
20 end
21 end
最后这是观点
1 <%= form_for @contact do |f| %>
2 <p>
3 <%=f.input :name %>
4 </p>
5 <p>
6 <%=f.input :email %>
7 </p>
8 <p>
9 <%=f.text_area :message %>
10 </p>
11 <p>
12 <%= f.submit %>
13 </p>
14 <%end%>
15
我知道解决方案可能就在眼前。但如果可能的话,我真的很感激一些帮助。 如果我能为您提供其他任何内容,请告诉我。
答案 0 :(得分:0)
您的代码中有一些不同的内容。首先,如果您从ActionMailer::Base
继承,那么您正在创建一个Mailer类,而不是ActiveRecord模型。我会重命名该课程ContactMailer
或只使用一个Mailer
作为整个应用,并称之为Mailer。
这也是您无法拨打Contact.new
的原因。如果您的Contact类继承自ActiveRecord::Base
,则可以在模型上调用new
并实例化该对象的实例。但是对于邮件程序,您正在定义类方法,每个方法都定义为发送特定的电子邮件。您永远不需要创建从ActionMailer继承的对象的新实例。
假设您有一个班级Mailer < ActionMailer::Base
,并且在该班级中您有一个方法def contact_us(subject)
,您可以致电:
Mailer.contact_us(subject).deliver
发送电子邮件。