【发布时间】:2015-05-01 01:52:31
【问题描述】:
admin_params 是 Rails 4.2 中允许的属性的哈希值(见下文):
这里是控制器动作create:
def create
@user = User.new(admin_params)
@user.last_updated_by_id = session[:user_id]
if @user.save
redirect_to URI.escape(SUBURI + "/view_handler?index=0&msg=Successfully Saved!")
else
flash.now[:error] = t('Data Error. Not Saved!')
render 'new'
end
end
sys_user_group_id 和 role_definition_id 的嵌套属性都应等于 @user 中的 1。然而,在@user = User.new(admin_params) 之后,它们都变成了nil。不知何故,admin_params 没有将role_definition_id 和sys_user_group_id 的值传递给@user(其他非嵌套值成功传递给@user,除了2 个嵌套)。
admin_params 定义为:
def admin_params
params.require(:user).permit(:name, :login, :email, :update_password_checkbox, :password_confirmation,
:password_new, :status, :user_type_id, :cell, :allow_text_msg,
:allow_email, :password, :customer_id, :customer_name, :local, user_roles_attributes: [:id, :role_definition_id, :_destroy],
user_levels_attributes: [:id, :sys_user_group_id, :_destroy])
end
Here 是我们关注的关于嵌套属性的强参数的 Rails 文档。什么可能导致 @user 没有被分配给 2 个嵌套属性?可能是admin_params的数据结构?
【问题讨论】:
-
填充的参数哈希来自应用程序的哪个位置? (你用什么来查看它的?)
-
在 rspec 中填充了 params 哈希。
-
只有这两个属性变成
nil? -
@rainbowsorbet,是的,只有 2 个嵌套属性 nil。 -
一个愚蠢的错误! 2 个嵌套模型中仍有
attr_accessible导致 nil。
标签: ruby-on-rails ruby-on-rails-4