我正在运行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
验证总是失败,说字段为空。通过引发异常,报告将显示模型配置文件及其填充的字段。就好像数据根本无法访问,所以我怀疑我是否错过了强大的参数 任何意见都欢迎。
答案 0 :(得分:0)
profile_params
函数将直接为您返回哈希数据。
它基本上做的是它为名为params
参数的键的'profile'键的值过滤permit(...)
哈希值
所以修复的方法是写
@profile = Profile.new(profile_params)
而不是
@profile = Profile.new(params[profile_params])
使用强参数,您几乎不会直接从控制器操作(例如params
)与create
数组交互。私有强参数方法将为您处理,并且只有安全,过滤的数据才会被赋予您的控制器操作。