参数的“user_”前缀可防止表单验证

时间:2011-12-14 10:37:21

标签: ruby-on-rails-3

我关注Ryan Bates' Multistep Forms cast,但我的参数前缀为“user_”。因此密码变为user_password等。在用户创建期间,不会验证teamname属性。我想这是由于user_前缀,我认为这是由于其默认前缀或使用“user_params”而导致的deep_merge,并试图添加“{:knockout_prefix =>'user_'}”但它没有'工作。

users / new.html.erb以例程“<%= form_for @user do | f |%>”开头并包括“<%= render”#{@user.current_step}_step“,:f => f%>”。这些步骤包括“<%= f.text_field:email%>”等字段,而不是“user_email”或其他任何字段。

users_controller.rb包含一个创建函数:

def create
  session[:user_params].deep_merge!(params[:user]) if params[:user]
  @user = User.new(session[:user_params])
  @user.current_step = session[:user_step]
  ...@user.save...(rest of the code omitted)
end

models / user.rb包含:

  attr_accessible :email, :password, :password_confirmation
  ..several validation codes according to steps..

网页来源是:

<input id="user_password" name="user[password]" size="30" type="password" />

有没有猜测为什么会出现这种前缀?

1 个答案:

答案 0 :(得分:0)

我在"in UsersController#create, User.new(params[:user]) return an empty User (params looks good)"找到了解决方案。在他的回答中,迪伦马科说:

  

您可以使用质量赋值来设置模型上的字段,但是当使用attr_accessible时,您仅限于在attr_accessible行中批量分配字段。

所以我将所有用户参数添加到attr_accessible选项,并且验证工作正常。