路由错误 |联系人控制器的未定义局部变量或方法"参数":类



我在contacts_controller.rb,中添加了以下代码

class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
if @contact.save
flash[:success] = "Message Sent."
redirect_to new_contact_path
else
flash[:danger] = @contact.errors.full_messages.join(", ")
redirect_to new_contact_path
end
end
private
def contact_params
params.require(:contact).permit(:name, :email, :comments)
end 
name = params[:contact][:name]
email = params[:contact][:email]
body = params[:contact][:comments]
ContactMailer.contact_email(name, email, body).deliver
end

保存代码后,我只在我的联系人页面上收到一个错误,

Routing Error
undefined local variable or method `params' for ContactsController:Class
Rails.root: /Users/headlineineed/dev/workspace/Saasapp

如果我去掉这条线,一切都会好起来的。我正在学习一个教程,我已经扫描了代码并进行了比较,我看不出有什么不同。

这是我的路线。rb

Rails.application.routes.draw do
root to: 'pages#home'
get 'about', to: 'pages#about'
resources :contacts, only: :create
get 'contacts-us', to: 'contacts#new', as: 'new_contact'
end

contact_mailer.rb

class ContactMailer < ActionMailer::Base
default to: 'EMAIL@gmail.com'
def contact_email(name, email, body)
@name = name
@email = email
@body = body
mail(from: email, subject: 'Contact Form Message')
end
end

如果每次创建联系人时都试图发送电子邮件,那么您需要移动如下所示的代码,

class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
if @contact.save
ContactMailer.contact_email(params[:contact][:name], params[:contact][:email], params[:contact][:comments]).deliver
flash[:success] = "Message Sent."
redirect_to new_contact_path
else
flash[:danger] = @contact.errors.full_messages.join(", ")
redirect_to new_contact_path
end
end
private
def contact_params
params.require(:contact).permit(:name, :email, :comments)
end
end

你的代码的问题是它在任何方法之外,而且实际上没有被任何人调用,现在当保存联系人时,它会发送电子邮件。

最新更新