Ruby on rails RubyonRails从散列递归实例化活动记录模型
我有两个类继承自Ruby on rails RubyonRails从散列递归实例化活动记录模型,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有两个类继承自ActiveRecord::Base,一个用户可能有许多徽章 class用户“kim bilir nerede”},这是Hash(#47159016253160)的一个实例 是否有任何方法可以从该散列中递归实例化我的所有模型,或者我是否需要在我的Userclass'initialize方法中手动执行该操作 我想解决这个问题的办法是: class用户
ActiveRecord::Base
,一个用户可能有许多徽章
class用户
class-Badge
当我为用户
调用API时,我得到以下响应:
{
"UserInfo": {
"CursePeriod": null,
"IsCursed": false,
"IsBanned": false,
},
"Badges": [
{
"Name": "kayıp",
"Description": "kim bilir nerede"
},
{
"Name": "çaylak",
"Description": ""
}
],
"HasEntryUsedOnSeyler": false,
"FollowerCount": 0,
"FollowingsCount": 0,
"Picture": null
}
当我将json作为散列传递给User.new时,我得到
ActiveRecord::AssociationTypeMismatch:预期为徽章(#47159034390540),
得到了{:name=>“kayıp”,:description=>“kim bilir nerede”},这是Hash(#47159016253160)的一个实例
是否有任何方法可以从该散列中递归实例化我的所有模型,或者我是否需要在我的User
class'initialize
方法中手动执行该操作
我想解决这个问题的办法是:
class用户 @badgesActiveRecord不支持多个初始化,这意味着您不能传递一个数组并期望一个类有多个实例,因为它们反映了这一点,new
用于实例化属于从ActiveRecord::Base
继承的X类的新对象
您可以做的是使用,它可以接受一个哈希数组,其中包含您所创建的每个记录所需的数据。虽然不是您所需要的,但嵌套属性有些相似,可能值得研究。我会检查的,谢谢。您必须从散列
中提取实例化新用户所需的数据。您不能传递整个散列并期望只使用所需的散列,这就是为什么您会收到错误消息。。。这是Hash(…)的一个实例。我只是想我必须使用user\u info\u attributes
键,而不是user\u info
。那么我在更新的部分就不会出现这种错误。这听起来比我的方法好。所以我可以简单地做标记。创建然后传递数组。如果这不是一个数组,而只是一个散列,那么是否会接受
的_嵌套的_属性_?我一直在尝试其他关联,但我得到了相同的associationtypemistmatch
错误。我可以更新我的问题以包含该部分。你可以传递一个散列数组,它将在数据库中插入记录,只要这些记录有效且不抛出任何错误(错误的列名等)。在单个散列的情况下,Ruby中就是这样调用方法的create
将把散列中的每个键作为模型中的属性及其对应的值,与以前一样,如果记录有效,它将保存记录。在json响应中使用像myUserInfo
这样的单个散列,我可以为myUserInfo
类使用接受嵌套的属性吗?我已经更新了我的问题以包括这一部分。你能检查一下吗?我看到了错误,但不是它发生的原因,你能添加整个解决方法@AndréYuhai吗?刚才添加了我如何尝试使用散列来获取用户
的实例。您可以在我的答案顶部看到类定义,它已经为
接受了嵌套的属性。