我应该将params从表单发送到控制器,然后将它们发送到模型。我需要在模型中检查它们。请帮忙... 形式:
<form action="questions">
<input type="text" name="user_name_param" /><br>
<input type="text" name="user_email_param" /><br>
<input type="submit" name="send" />
</form>
问题控制者:
user_id = User.new.check_user(params[:user_name_param], params[:user_email_param])
用户模型:
validates :name_param, :presence => true,
:length => {:minimum => 1, :maximum => 254}
validates :email_param, :presence => true,
:length => {:minimum => 3, :maximum => 254},
:uniqueness => true,
:format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i}
def check_user(name_param, email_param)
if (name_param && email_param).valid?
User.where(:user_name => name_param, :user_email => email_param).first.try(:id) || false
else render :template => "questions/auth_form"
end
端
我有未定义的方法`有效吗?'为nil:NilClass 错误。
答案 0 :(得分:0)
其次,if (name_param && email_param).valid?
是错误的。 name_param && email_param
执行布尔运算,如果两者都是真实的,它会返回第二个结果;在这种情况下,其他NilClass
。 valid?
未在这些类上定义,它是为ActiveRecord对象定义的。
第三,render :template => "questions/auth_form"
再次出错。 render
是ActionController方法。您不能在模型中使用它;这种类型的逻辑应该出现在你的控制器中。
一般解决方案:
您可能正在尝试找到与该电子邮件和名称匹配的用户;否则呈现授权页面。也许这个控制器逻辑就足够了:
@user = User.where(["user_name = ? and user_email = ?", params[user_name_param], params[user_email_param]])
if @user.valid?
#DO this
else
#render that
end
Rails 4的 #find_by
。