我有一个笔记模型,具有以下关联
note.rb
has_many :note_categories, :dependent => :destroy
has_many :categories, :through => :note_categories
创建NoteCategory模型以充当注释和类别之间的连接表。
我需要实现以下内容:
显然要这样做,我需要访问用户的id,以检查类别的创建者字段。我已经在NoteCategory模型中使用了before_destroy方法来做其他事情,但我无法在那里访问current_user.id,因为它是一个模型,而current_user是Application Controller中的一个方法。从我在这里读到的问题来看,似乎从模型中访问当前用户的id是不好的形式。
我不认为我可以在这种情况下使用控制器,因为删除注释时,:dependent => :destroy
行意味着也会删除note_categories中的相关行。我也需要在这种情况下进行创建者检查,但是通过模型中的destroy方法删除了note_categories行,而不是控制器,这是指定的行为:dependent => :destroy
。
那我该怎么做呢?谢谢你的阅读!
答案 0 :(得分:0)
这样做的一种方法是将一个attr_accessor添加到Note模型中,如下所示:
# in Note.rb
attr_accessor :destroyed_by
并在销毁记录之前设置它:
# NotesController#destroy
@note.destroyed_by = current_user.id
@note.destroy
然后在您的Note.rb before_destroy
来电中,您可以针对destroyed_by
ID检查类别的创建者ID。
答案 1 :(得分:0)
我认为您要维护创建帖子的人员以及删除帖子的日志。 before_destroy方法执行删除关联的部分,我认为它适合您。保持记录创建笔记的用户是否正在删除笔记的记录部分。我希望这可以帮助你解决这个问题
http://rohitsharma9889.wordpress.com/2010/08/19/logging-in-ruby-on-rails/
修改强> 您也可以尝试阅读本文。我建议你更喜欢上面这个
答案 2 :(得分:0)
你说
在删除note_categories中的行之前,我需要确定从注释中删除类别的用户是否是最初创建该类别的用户(类别模型中的创建者字段) 如果是同一个用户,则删除类别条目本身
你确定你不想做这样的事吗?如果用户对许多笔记使用了相同的类别,并且他想从其中一个笔记中删除它,该怎么办?您确定要删除note_categories中的条目,但是您是否还要删除该类别?
这种情况的一个常见实现是在删除note_category(通过可能是before_destroy)时检查这个是否是该类别的最后一个note_categories,如果是,则将其删除。这也意味着如果删除了一个注释,则只应删除相关的note_categories,而不是类别本身。