0

私は次のモデルを持っています:

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

  belongs_to :mission, :inverse_of => nil
  validates_presence_of :mission, :inverse_of => nil

  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

class Mission
  include Mongoid::Document

  attr_accessible :title
  field :title, type: String
  validates_presence_of :title
end

問題は、ユーザーから user_mission を削除できないことです。

私は私の見解で失敗しました(基本的にrailscastsからの逐語的):

jQuery ->
  $('form').on 'click', '.remove_fields', (event) ->
    $(this).prev('input[type=hidden]').val('1')
    $(this).closest('fieldset').hide()
    event.preventDefault()

<fieldset>
  <%= f.object.mission.title %>
  <%= f.hidden_field :_destroy %>
  <%= link_to "remove", '#', class: "remove_fields" %>
</fieldset>

そして、次の仕様に問題があるようです

it "should delete using nested attributes" do
  user = User.create(:username => "username", :email => "user@example.com", :password => "password", :password_confirmation => "password")
  user.attributes = { 
    user_missions_attributes: { 
      "0" => { mission_title: "Mission A" } } }
  user.save!
  saved_user = User.first
  saved_user.user_missions.size.should == 1

  saved_user.attributes = { 
    user_missions_attributes: { 
      "0" => { :_destroy => '1' } } }
  saved_user.save!
  emptiedUser = User.first
  debugger

  emptiedUser.user_missions.size.should == 0
end

UserMission が 1 つ見つかった最後の行で失敗します。

Mongoid 3.0.6 と Rails 3.2.8 を使用しています。どんな助けでも大歓迎です。

4

1 に答える 1

0

id含めるか_id、破棄する必要があります。「0」にはキーがありuser_missions_attributesます。ハッシュ内で「0」キーを押すと、実際に削除するドキュメントのIDが必要になります。だから次のようなもの:

"0" => { :_id => ..., :_destroy => '1' }
于 2012-10-04T07:41:21.157 に答える