向列表用户发送消息未定义的局部变量或方法`user'

时间:2014-08-25 02:12:05

标签: ruby-on-rails

我目前正在尝试开发以下功能: 用户可以列出列表。其他人可以点击这些列表,点击申请,填写表格并点击提交。当然,这个表格应该发送给列表用户。我坚持让最后一部分正确。我正在使用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;但我不确定设置是否完全正确。

如果您需要更多信息,请与我们联系。 感谢

1 个答案:

答案 0 :(得分:0)

contact_email方法的第二行引用了您未在任何位置设置的变量“user”(如错误所示)。但无论如何你似乎并不需要它。尝试更改:

mail(to: user.email, subject: 'Contact Request')

mail(to: email, subject: 'Contact Request')

并摆脱界限:

@user = user

但也要考虑你在邮件代码中做了什么。如果您不使用它们,为什么要设置实例(@)变量?