embeds_many 関連付けがあり、親ドキュメントを保存すると、子が保存されません。
class User
include Mongoid::Document
embeds_many :user_missions
attr_accessible :user_missions_attributes
accepts_nested_attributes_for :user_missions, allow_destroy: true
end
class UserMission
include Mongoid::Document
embedded_in :user, :inverse_of => :user_missions
has_one :mission, autosave: true
validates_presence_of :mission
attr_accessible :mission_title
def mission_title
mission.try(:title)
end
def mission_title=(title)
self.mission = Mission.find_or_create_by(:title => title) if title.present?
end
end
これが私が失敗している仕様です:
it "should save mission to user_mission when created" do
user_mission = UserMission.new
user = create(:user)
user.user_missions << user_mission
user_mission.mission_title = "Created Title"
user.save!
#user_mission.save!
User.first.user_missions[0].mission.title.should == "Created Title"
end
私は得る:
undefined method `title' for nil:NilClass
行にコメントする#user_mission.save!
と機能します。問題は、これがフォームで機能する必要があることです.Mongoidは埋め込みドキュメントのフィールドを自動的に保存すると思いました。
埋め込まれた UserMission のデータを保存する親 User ドキュメントを取得するにはどうすればよいですか?
ありがとう
アップデート
追加するのを忘れていたミッション モデルは次のとおりです (重要かどうかはわかりませんでした)。
class Mission
include Mongoid::Document
belongs_to :user_mission, :inverse_of => :mission
attr_accessible :title
field :title, type: String
validates_presence_of :title
field :lowercase_title
before_create :lower_title_case
field :description, type: String
private
def lower_title_case
self.lowercase_title = self.title.downcase
end
end