如何在不需要从RoR中的模型访问current_user.id的情况下实现此代码?

时间:2010-08-24 03:38:39

标签: ruby-on-rails

我有一个笔记模型,具有以下关联

note.rb

has_many :note_categories, :dependent => :destroy
has_many :categories, :through => :note_categories

创建NoteCategory模型以充当注释和类别之间的连接表。

我需要实现以下内容:

  1. 用户从便笺中删除类别。这可以通过从注释中删除一个类别(删除note_categories表中的一个条目),或完全删除注释(删除note_categories表中与注释相关的所有条目)来完成。
  2. 在删除note_categories中的行之前,我需要确定从注释中删除该类别的用户是否是最初创建该类别的用户(类别模型中的创建者字段)
  3. 如果是同一个用户,则删除类别条目本身
  4. 显然要这样做,我需要访问用户的id,以检查类别的创建者字段。我已经在NoteCategory模型中使用了before_destroy方法来做其他事情,但我无法在那里访问current_user.id,因为它是一个模型,而current_user是Application Controller中的一个方法。从我在这里读到的问题来看,似乎从模型中访问当前用户的id是不好的形式。

    我不认为我可以在这种情况下使用控制器,因为删除注释时,:dependent => :destroy行意味着也会删除note_categories中的相关行。我也需要在这种情况下进行创建者检查,但是通过模型中的destroy方法删除了note_categories行,而不是控制器,这是指定的行为:dependent => :destroy

    那我该怎么做呢?谢谢你的阅读!

3 个答案:

答案 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/

修改 您也可以尝试阅读本文。我建议你更喜欢上面这个

Environment variables in Model

答案 2 :(得分:0)

你说

  

在删除note_categories中的行之前,我需要确定从注释中删除类别的用户是否是最初创建该类别的用户(类别模型中的创建者字段)   如果是同一个用户,则删除类别条目本身

你确定你不想做这样的事吗?如果用户对许多笔记使用了相同的类别,并且他想从其中一个笔记中删除它,该怎么办?您确定要删除note_categories中的条目,但是您是否还要删除该类别?

这种情况的一个常见实现是在删除note_category(通过可能是before_destroy)时检查这个是否是该类别的最后一个note_categories,如果是,则将其删除。这也意味着如果删除了一个注释,则只应删除相关的note_categories,而不是类别本身。