1

私は自分の連想に問題があり、自分の問題に関連する答えを見つけようと探し回っています. 私のフォームには、作成時にスタディにユーザーを追加する選択ボックスがあります。問題は、リストを編集してスタディからユーザーを削除してから再度追加すると、回答が削除されることです。私はまだ RoR を学んでおり、既存のコードをこのように機能させるタスクを与えられています。スタディ モデルには回答を通じて多くのユーザーがいますが、回答を削除せずにスタディ ユーザーを編集するにはどうすればよいですか? 私のフォーム:

= select_tag("users[]", options_for_select(@users.collect { |ff| [ff.full_name, ff.id] }, @study.users.collect { |fs| fs.id }), | {:multiple=>true, :id => "users"})                                                                                      |

私の研究.rb:

has_many :users, :through => :answers
has_many :answers, :group => :grouping_number
accepts_nested_attributes_for :answers 

私のuser.rb

has_many :answers
has_many :studies, :through => :answers

私の答え.rb

belongs_to :user
belongs_to :study
belongs_to :question

これは私が見落としていた単純なものである可能性があることを認識しています。これは、何かを長時間見ているときによくあることですが、正しい方向へのポイントは大歓迎です.

4

2 に答える 2

2

act_as_paranoidのようなSoft Delete gemを使用することでメリットが得られる場合があります。

このようにして、関連付けはそのまま残りますが、データベースから実際に削除されるのではなく、削除済みとしてフラグが立てられます。これの利点は、スタディ アソシエーションが「削除」された後でも、ユーザーの回答に対してアクティブなレコードを照会できることです。一方で、アプリケーションから実際にアソシエーションが削除された場合の動作は同じままです。

于 2012-08-08T14:46:46.097 に答える
1

ユーザーが回答を与えた場合にのみ研究に所属できるというのは理にかなっていますか? どういうわけか、独立した関係 UserStudies を想定します。あなたの場合、 has_and_belongs_to_many 関係だけでなく、別のモデルとして。これにより、このモデルでフラグを「アクティブ」にすることができ、その方法でリレーションをアクティブまたは非アクティブにすることができます。次に、begs_to 関連付けに条件を追加するだけです。

これは、Deefour が既に推奨しているような gem が行うこととほぼ同じです。

于 2012-08-08T14:49:30.790 に答える