3

我需要一些建议。我正在制作一个学习起来有点复杂的应用程序。它有一个用户模型。用户注册后,我希望在他/她第一次(也是第一次)访问某些页面时出现一个模式对话框。例如,有“投票”页面和“创建投票”页面等。

实施此类帮助系统的最佳方式是什么?我想在我的用户模型中添加一个列,该列可以包含一个默认值列表,例如“投票、创建、共享”。当用户访问与这些操作之一相对应的页面时,如果该操作的名称仍在列表中,则会出现模式并且该操作的名称将从列表中删除。

这听起来合理吗?我知道在规范化数据库中,您不应该在单个字段中存储多个值。但是创建一个名为“actions”的表和另一个连接表来将用户与操作相关联似乎很疯狂。用户在网站上只能做 4 或 5 件事。

或者还有其他我想念的方法吗?提前感谢您的建议。

4

1 回答 1

0

您可能应该制作一个 UserTrigger 模型,该模型可用于“触发”这样的某些操作。在实践中它看起来像这样:

<% for_trigger(@user, :first_time_help) do %>
...help content...
<% end %>

此方法的定义大致如下:

def for_trigger(model, name)
  if (model.triggers.where(:name => name.to_s).delete_all > 0)
    yield
  end
end

较软的版本将有一个should_trigger?did_trigger!方法对,其中一个将测试,另一个将实际删除触发器记录。对于大多数情况,这个单发应该足够好。

您的用户模型中的定义大致如下:

class User < ActiveRecord::Base
  has_many :triggers,
    :class_name => 'UserTrigger'
end

class UserTrigger < ActiveRecord::Base
  belongs_to :user
end

after_create您必须在您的用户模型或任何其他需要它的模型上预先填充这些触发器记录。要重新设置触发器,只需重新添加记录。

于 2012-12-19T22:40:46.250 回答