我有家庭控制器,并尝试更新不同控制器的表的字段。
家庭控制器
class HomeController < ApplicationController
before_action :user_params, only: [:index]
def index
@email = Email.new(user_params)
end
def contact
end
def faq
end
def team
end
def privacy
end
def esave
if !user_params.nil?
if @email.save_with_captcha
flash[:notice] = "Thank you for registering you email address"
redirect_to :action => 'index'
else
render 'esave'
end
end
end
def user_params
params.require(:email).permit(:email, :captcha, :captcha_key) if params[:email]
end
end
所以我试图在我的家庭控制器中创建新的电子邮件模型字段,但是当我点击保存时会抛出此错误...
App 24078 stderr: Completed 500 Internal Server Error in 3ms
App 24078 stderr:
App 24078 stderr: NoMethodError (undefined method `save_with_captcha' for nil:NilClass):
App 24078 stderr: app/controllers/home_controller.rb:37:in `esave'
我的电子邮件模型带有定义的验证,就像这样
class Email < ActiveRecord::Base
apply_simple_captcha :message => "The secret Image and code were different", :add_to_base => true
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/ , :message => "Invalid Format"
端
所以我不会理解为什么这个save_simple_captcha为零,任何建议
答案 0 :(得分:0)
这是我的2美分。
记住HTTP是无状态的。您已在索引中定义了@email
,在页面刷新后您已经esave
,因此@email
不再可用。
(控制器有点不同,直接Ruby类实例化,变量可以被抛出)
您必须为您所在的方法实例化@email
。
我不知道你的模型中有什么,所以我可以猜测其余部分。
此@email = Email.find(params[:id])
可能会或可能不会起作用,因为我不了解您的模型。 (如其他评论中所述)
也可以将您的模型放在这里。我们或许可以帮助您。
PS:当你不了解一个非常基础的框架时接受框架代码不是一个好主意:)