Rails: поле было определено как массив (n), но получил ActiveSupport :: HashWithIndifferentAccess - PullRequest
0 голосов
/ 03 февраля 2011

Я создал модель Post и TagObject следующим образом

class Post
  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_many :tag_objects

  #embeds_many :comments

  references_one :uploader, :class_name => 'User'
  mount_uploader :image, ImageUploader

  validates_presence_of :image

  attr_accessible :tag_objects, :image
end

class TagObject
  include Mongoid::Document

  field :name
  field :tags, :type => Array

  embedded_in :post, :inverse_of => :tag_objects

  attr_accessible :name, :tags
end

и в настоящее время у меня есть страница, отправляющая PUT в метод обновления контроллера Post.Обновление не удается, и я получаю следующее в консоли WEBrick:

Started POST "/posts/4d4a174fa729cf71c70000a8" for 127.0.0.1 at Wed Feb 02 21:52:09 -0500 2011
  Processing by PostsController#update as HTML
  Parameters: {"post"=>{"tag_objects"=>{"1"=>{"tags"=>{"1"=>"testingfds"}}}}, "authenticity_token"=>"OZ+eXzD5NyqUI4CzPadlFUMDwRrg4LsaQBs5i+J65tU=", "id"=>"4d4a174fa729cf71c70000a8"}
honeycomb_development['posts'].find({:_id=>BSON::ObjectId('4d4a174fa729cf71c70000a8')}, {}).limit(-1)
Completed   in 2ms

Mongoid::Errors::InvalidType (Field was defined as a(n) Array, but received a ActiveSupport::HashWithIndifferentAccess with the value {"1"=>"testingfds"}.):
  app/controllers/posts_controller.rb:39:in `update'

Я абсолютно не знаю, как это исправить, и любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2011

В модели вместо

field :tags, :type => Array
укажите
field :tags, :type => Hash

0 голосов
/ 04 февраля 2011

Да, кажется, проблема была в том, что он пытался сделать

tags = {0=>'testingdfg'}

вместо того, чтобы

tags[0] = 'testingdfg'

и установите его содержимое так, как я ожидал. Я просто добавил в метод обновления некоторую логику, и она отлично работает.

...