3

アドバイスが必要です。学習が少し複雑なアプリを作成しています。ユーザーモデルがあります。ユーザーがサインアップしたら、特定のページに初めてアクセスしたときにモーダル ダイアログが表示されるようにしたいと考えています。たとえば、「投票」ページと「投票の作成」ページなどがあります。

この種のヘルプ システムを実装する最善の方法は何ですか? 「投票、作成、共有」などのデフォルトの値リストを含むことができる列をユーザー モデルに追加することを考えました。ユーザーがこれらのアクションのいずれかに対応するページにアクセスしたときに、アクションの名前がまだリストにある場合は、モーダルが表示され、アクションの名前がリストから削除されます。

これは合理的に聞こえますか?正規化されたデータベースでは、単一のフィールドに複数の値を格納しないでください。しかし、「アクション」と呼ばれるテーブルと、ユーザーをアクションに関連付けるための別の結合テーブルを作成するのはクレイジーに思えます。ユーザーがサイトでできることは 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?anddid_trigger!メソッドのペアがあり、一方がテストし、もう一方が実際にトリガー レコードを削除します。ほとんどの場合、このシングルショットで十分です。

User モデルには、おおよそ次のような定義があります。

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

class UserTrigger < ActiveRecord::Base
  belongs_to :user
end

after_createこれらのトリガー レコードを User モデル、またはそれを必要とする他のモデルに事前に入力する必要があります。トリガーを再設定するには、レコードを再度追加します。

于 2012-12-19T22:40:46.250 に答える