当字段不为空时,验证失败为空白

时间:2014-07-22 20:54:21

标签: validation

我正在运行ruby 1.9.3和rails 4.1.4 尝试以下验证 在models \ profile.rb

attr_accessor :password
validates :name, :presence => true, :uniqueness => true, :length => { :in => 3..20 }
validates :password, :confirmation => true #password_confirmation attr

validates_length_of:password,:in => 6..20,:on => :创建    before_save:encrypt_password

在视图个人资料中\ new.html.erb 从表格

<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>

<p>
  <%= f.label :email %><br />
  <%= f.text_field :email %>
</p>

<p>
  <%= f.label :password %><br />
  <%= f.password_field :password %>
</p>
<p>
  <%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %>
</p>
<p>
  <%= f.label :interests %><br />
  <%= f.text_area :interests %>
</p>
<p>
  <%= f.label :zip %><br />
  <%= f.text_field :zip %>
</p>
<p>
  <%= f.label :country %><br />
  <%= f.country_select :country, ["United Kingdom"] %>  </p>

使用强参数controllers \ profile_controller,rb

 class ProfilesController < ApplicationController

def new
  @profile = Profile.new 
end
def create
  @profile = Profile.new(params[profile_params])
  if @profile.save
    flash[:notice] = "You signed up successfully"
    flash[:color]= "valid"
  else
    flash[:notice] = "Form is invalid"
    flash[:color]= "invalid"
  end
  render "new"
end
private
  ## Strong Parameters 
   def profile_params
     params.require(:profile).permit(:name, :email, :password, :interests,:zip)
  end
 end

验证总是失败,说字段为空。通过引发异常,报告将显示模型配置文件及其填充的字段。就好像数据根本无法访问,所以我怀疑我是否错过了强大的参数 任何意见都欢迎。

1 个答案:

答案 0 :(得分:0)

profile_params函数将直接为您返回哈希数据。
它基本上做的是它为名为params参数的键的'profile'键的值过滤permit(...)哈希值 所以修复的方法是写

@profile = Profile.new(profile_params)

而不是

@profile = Profile.new(params[profile_params])

使用强参数,您几乎不会直接从控制器操作(例如params)与create数组交互。私有强参数方法将为您处理,并且只有安全,过滤的数据才会被赋予您的控制器操作。