2012-08-08 34 views
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"})                      | 

我study.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 

我answer.rb

belongs_to :user 
belongs_to :study 
belongs_to :question 

我意识到,这可能是我忽视了一些简单的东西,通常是cas当花费太长时间看东西时,但正确方向的任何一点都会受到高度赞赏。

回答

2

您可能会喜欢于Soft Delete gem,比如acts_as_paranoid

这种方式的关联将保持不变,但被标记为已删除,而不是实际从数据库中删除。这样做的好处是,即使学习关联被“删除”,您仍然可以查询用户答案的​​活动记录,而实际上已从应用程序中删除的关联行为将保持不变。

+0

这还行吗?它看起来在过去的2到3年内一直处于非活动状态。 – 2012-08-08 14:49:16

+0

我不使用它。我链接到它,因为它仍然是红宝石工具箱中最流行的。我的回答主要是指出OP所忽视的'东西',因为软删除行为可能正是他所追求的东西:) – deefour 2012-08-08 14:54:39

+0

够公平! :) 为了记录,OP:https://www.ruby-toolbox.com/categories/Active_Record_Soft_Delete – 2012-08-08 14:56:48

1

只有当他给出答案时,用户才能属于一项研究才有意义吗?我会以某种方式假设一个独立的关系UserStudies。在你的情况下,作为一个单独的模型,而不仅仅是一个has_and_belongs_to_many关系。这将允许你在这个模型中有一个“激活”的标志,并且以这种方式激活或关闭这个关系。然后你只需在你的belongs_to关联中添加一个条件。

这大致就像Deefour已经推荐的那些宝石一样。

相关问题