0

私は User.rb モデルを使った Rails アプリを持っていますが、これは Practice.rb モデルと多対多の関係にあります (モデルの名前としては不適切かもしれません)。 '空手' と '柔道') をデータベースにシードしました。ユーザーが持つプラクティスの数を減らしたい状況があり (ユーザーは最大 2 つ)、2 つ目のプラクティスを削除するために、モデルの 1 つのメソッド内でこれを行います。

      if user.practices.size > 1
        user.practices[1].destroy
      end 

しかし、その結果、その練習 (たとえば、「空手」) が から削除されるだけでなく、user.practicesその練習が存在しなくなり、「空手」は誰もが利用できる練習にリストされなくなります。Practice.all「空手」をやると出てこない。

'delete'代わりに使用すると同じことが起こります'destroy.'

user.practices は CollectionProxy を生成します

user.practices完全に削除せずに削除する適切な方法は何ですかPractice.all

アップデート

モデル編成はこんな感じ。理想的には、ユーザーからプラクティスを削除すると、関連する practice_listing も削除されます。

User.rb

has_many :practice_listings
  has_many :practices, through: :practice_listings

Practice.rb
 has_many :practice_listings
  has_many :users, through: :practice_listings

PracticeListing.rb

belongs_to :practice
belongs_to :user
4

2 に答える 2

3

配列から要素を削除する必要があります:

user.practices.delete(user.practices[2])

または:

user.practices.delete_at(2)
于 2013-05-29T18:53:21.633 に答える
1

いくつかの方法があります。1つは次のとおりです。

 user.practices = user.practices - [user.practices[1]]
于 2013-05-29T18:50:03.303 に答える