具有STI的轨道3中的模型和控制器之间的交互

时间:2011-06-28 00:34:58

标签: ruby-on-rails-3 activerecord sti

我正在使用rails 3实现一个Web解决方案,其中用户有一个“Actions”列表。它们可以是待处理的或经过验证的,只有管理员才能验证。

两个典型的行动是:

1 /报告错误的图片(如果管理员验证,那么图片将被删除,因此我们需要其ID) 2 /提交新类别(如果管理员验证,则将添加类别)

每个操作都有一个特定的点数,这个点将转向用户的声誉,这使得它成为继承的良好候选者(验证结束时的共享行为,子节点中的特定字段和方法实现)。

我计划在模型中使用“onValidate”方法删除图片(1 /)或添加新类别(2 /),但将它放在模型中感觉很奇怪。

您能告诉我如何改进设计并将其移到控制器中吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你正确描述了什么,我不明白为什么你认为在模型中使用这个代码是件坏事。我认为你的用户是has_many动作,动作有分数。验证某个操作后,其他一些对象的状态会发生变化(图片被删除,类别被添加')

class DeletePictureAction < Action
  belongs_to :user
  belongs_to :picture

  def on_validate
     do_subclass_specific_stuff_to(picture)
     add_to_user_score(score)
  end
end

这里似乎没有什么与路由有关,所以它在控制器中没有位置......