我目前正在尝试开发以下功能: 用户可以列出列表。其他人可以点击这些列表,点击申请,填写表格并点击提交。当然,这个表格应该发送给列表用户。我坚持让最后一部分正确。我正在使用ActionMailer,这就是我得到的:
listing_controller.rb
def send_mail
@user = User.find_by_name(params[:name])
name = params[:name]
email = params[:email]
body = params[:comments]
UserMailer.contact_email(name, email, body).deliver
redirect_to contact_path, notice: 'Message sent'
end
apply.html.erb
<div class="top">
<div class="container-content">
<div class="container">
<%= form_tag(send_mail_path) do %>
<div class="form-group">
<%= label_tag 'name', 'Name' %>
<%= text_field_tag 'name', nil, class: 'form-control', placeholder: 'Your Name' %>
</div>
<div class="form-group">
<%= label_tag 'email', 'Email' %>
<%= email_field_tag 'email', nil, class: 'form-control', placeholder: 'Your Email Address' %>
</div>
<div class="form-group">
<%= label_tag 'comments', 'Comments' %>
<%= text_area_tag 'comments', nil, class: 'form-control', rows: 4, placeholder: 'Comments...' %>
</div>
<%= submit_tag nil, class: 'btn btn-default btn-about pull-right' %>
<% end %>
</div>
</div>
</div>
user_mailer.rb
class UserMailer < ActionMailer::Base
default from: "from@example.com"
def welcome_email(user)
@user = user
@url = 'http://example.com/login'
mail(to: user.email, subject: "Welcome to My Awesome Site")
end
def contact_email(name, email, body)
@user = user
@name = name
@email = email
@body = body
mail(to: user.email, subject: 'Contact Request')
end
端
路由
match '/send_mail', to: 'listings#send_mail', via: 'post'
我得到了它的工作,当用户注册时,他正在收到一封电子邮件。但我似乎无法让用户可以联系上市用户。现在我得到以下错误未定义的局部变量或方法`user&#39;但我不确定设置是否完全正确。
如果您需要更多信息,请与我们联系。 感谢
答案 0 :(得分:0)
contact_email方法的第二行引用了您未在任何位置设置的变量“user”(如错误所示)。但无论如何你似乎并不需要它。尝试更改:
mail(to: user.email, subject: 'Contact Request')
到
mail(to: email, subject: 'Contact Request')
并摆脱界限:
@user = user
但也要考虑你在邮件代码中做了什么。如果您不使用它们,为什么要设置实例(@)变量?