【问题标题】:Rails 4 - whitelisted nested attributes nil in createRails 4 - 在创建中将嵌套属性列入白名单
【发布时间】: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_idrole_definition_id 的嵌套属性都应等于 @user 中的 1。然而,在@user = User.new(admin_params) 之后,它们都变成了nil。不知何故,admin_params 没有将role_definition_idsys_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


【解决方案1】:

您对这些属性的命名可能不一致,这会导致您观察到的行为。

user_role_id 没有出现在#permit 的参数列表中。也许这是由于我还不知道的一些 Rails 语法糖,因为 :iduser_roles_attributes 数组中的一个值。但在这种情况下,我希望sys_user_group_id(它对#permit 进行参数)是user_levels_sys_user_group_id,因为:sys_user_group_id 出现在user_levels_attributes 数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多