【问题标题】:AssociationTypeMismatch (User(#301360) expected, got Hash(#88300)) in RailsAssociationTypeMismatch (User(#301360) 预期,得到了 Hash(#88300)) 在 Rails
【发布时间】:2015-03-27 11:29:46
【问题描述】:

我尝试从嵌套的 json 创建一个对象。但我收到 AssociationTypeMismatch 错误。 我是 ruby​​ on rails 的新手,不确定,这是正确的方法。 我很感谢任何提示。

错误出现在avatars_controller.rb中的“@avatar.from_json(json)”这一行


头像.rb

class Avatar < ActiveRecord::Base
  has_one :user
  accepts_nested_attributes_for :user
end


用户.rb

class User < ActiveRecord::Base
  belongs_to :avatar
end


json

[
 {
    "id": 7,
    "user": {
        "id": 47,
        "gender": "male",
        "name": "Mark",
        "created_at": "2015-01-07T11:44:50.991Z",
        "updated_at": "2015-01-28T14:39:03.900Z"
    },
    "login_counter": 5,
    "created_at": "2015-01-28T14:39:03.896Z",
    "updated_at": "2015-03-03T12:11:43.432Z"
}
]   


avatars_controller.rb

def get_data_button  
  json= open("http..." ).read
  @avatar = Avatar.new
  @avatar.from_json(json)

  respond_to do |format|
    if @avatar.save
      format.html { redirect_to user_url  }
    else
      format.html { render :new }
    end
  end
end

def avatar_params
  params.require(:avatar).permit( :login_counter, user: [:gender, :name])
end

【问题讨论】:

  • 改行params.require(:avatar).permit( :login_counter, user_attributes: [:gender, :name])...
  • @DaveNewton 异常出现在“@avatar.from_json(json)”这一行
  • @freshgrand 你试过我问的吗?
  • jsonHash 吗?
  • 说实话,我真的不知道。我得到了上面的 json 表示,现在我尝试从中创建和对象。

标签: ruby-on-rails json ruby-on-rails-4 strong-parameters


【解决方案1】:

请尝试使用此代码。

params.require(:avatar).permit( :login_counter, user_attributes: [:gender, :name])

[
 {
"id": 7,
"user_attributes": {
    "id": 47,
    "gender": "male",
    "name": "Mark",
    "created_at": "2015-01-07T11:44:50.991Z",
    "updated_at": "2015-01-28T14:39:03.900Z"
},
"login_counter": 5,
"created_at": "2015-01-28T14:39:03.896Z",
"updated_at": "2015-03-03T12:11:43.432Z"

} ]

【讨论】:

  • 是的,我看到你的 cmets 晚了
  • 你能告诉我你的表单吗,因为你的参数看起来不太好,参数应该有 user_attributes 。
  • @freshgrand,请试试上面的json
  • @ROR,json 来自一个测试 api,但我无法更改它。
猜你喜欢
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多