如何检查模型中的参数?

时间:2013-06-09 21:01:20

标签: ruby-on-rails validation

我应该将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 错误。

1 个答案:

答案 0 :(得分:0)

  • 首先,这种形式非常传统。阅读form_tagform_for和FormHelpers。

  • 其次,if (name_param && email_param).valid?是错误的。 name_param && email_param执行布尔运算,如果两者都是真实的,它会返回第二个结果;在这种情况下,其他NilClassvalid?未在这些类上定义,它是为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