Моногенные поля не сохранились - PullRequest
0 голосов
/ 09 сентября 2011

Итак, у меня есть довольно простой класс mongoid:

class Offer
  include Mongoid::Document

  field :date, type: DateTime
  field :accepted, type: Boolean

  scope :accepted, where(accepted: true)
  scope :denied, where(accepted: false)

  belongs_to :from, class_name: 'User', inverse_of: :from_offers
  belongs_to :to, class_name: 'User', inverse_of: :to_offers
  belongs_to :update 
end

Однако, после создания, НИКОГДА из его полей не может быть обновлено.Если я сделаю что-то вроде offer.accepted = true, а затем offer.save !, ошибок не возникнет, но как только действие будет выполнено и вы обновите страницу, или изменения будут отменены.Я действительно не знаю, как поступить.Любая помощь?

ОБНОВЛЕНИЕ: не должен ли мой класс обновления иметь поле offer_id?

=> #<Update _id: 4e6933836066250375000033, _type: nil, updated_at: 2011-09-08 21:28:44 UTC, type: "offer", unread: false, topic_id: nil, post_id: nil, user_id: BSON::ObjectId('4e692ad3606625123b000001'), profile_id: nil, commenter_id: BSON::ObjectId('4e692b0b606625037500002a')>

ОБНОВЛЕНИЕ2: Я думаю, что это может быть ошибкой в ​​has_one.Я вернулся к хранению идентификатора обновления в строковом поле вместо соединения has_one, и все, кажется, в порядке.

1 Ответ

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

Это также сообщалось как проблема GitHub .

Мне не удалось воспроизвести проблему с Mongoid 2.2.0 или в стабильной ветви 2.2.0 (по состоянию на d6ace09c).

Этот код:

class Offer
  include Mongoid::Document

  field :date, type: DateTime
  field :accepted, type: Boolean

  scope :accepted, where(accepted: true)
  scope :denied, where(accepted: false)

  belongs_to :from, class_name: 'User', inverse_of: :from_offers
  belongs_to :to,   class_name: 'User', inverse_of: :to_offers
end

class User
  include Mongoid::Document

  has_many :from_offers,  :class_name => 'Offer', :inverse_of => :from
  has_many :to_offers,    :class_name => 'Offer', :inverse_of => :to
end

User.delete_all
Offer.delete_all

user1 = User.create
user2 = User.create
user3 = User.create
puts "user1 ID = #{user1.id}"
puts "user2 ID = #{user2.id}"
puts "user3 ID = #{user3.id}"

Offer.create(
  :date     => Date.today,
  :accepted => false,
  :from     => user1,
  :to       => user2,
)

ap Offer.first.attributes
Offer.first.update_attributes :accepted => true, :to => user3
ap Offer.first.attributes

Произвел этот вывод, который показывает, что offer был успешно обновлен:

user1 ID = 4e696a052b58af5dce000001
user2 ID = 4e696a052b58af5dce000002
user3 ID = 4e696a052b58af5dce000003
{
         "_id" => BSON::ObjectId('4e696a052b58af5dce000004'),
        "date" => 2011-09-08 04:00:00 UTC,
    "accepted" => false,
     "from_id" => BSON::ObjectId('4e696a052b58af5dce000001'),
       "to_id" => BSON::ObjectId('4e696a052b58af5dce000002')
}
{
         "_id" => BSON::ObjectId('4e696a052b58af5dce000004'),
        "date" => 2011-09-08 04:00:00 UTC,
    "accepted" => true,
     "from_id" => BSON::ObjectId('4e696a052b58af5dce000001'),
       "to_id" => BSON::ObjectId('4e696a052b58af5dce000003')
}
...