0

User と Discussion の 2 つのモデルがあります。モデルのインデックスを以下のように定義しました:
User モデルの場合:

define_index do
indexes email
indexes first_name
indexes last_name, :sortable => true
indexes groups(:name), :as => :group_names
has "IF(email_confirmed = true and status = 'approved', true, false)", :as => :approved_user, :type => :boolean
has "IF(email_confirmed = true and (status = 'approved' or status='blocked'), true, false)", :as => :approved_or_blocked_user, :type => :boolean
has points, :type => :integer
has created_at, :type => :datetime
has user(:id)
set_property :delta => true
end

ディスカッション モデルの場合:

define_index do
indexes title
indexes description
indexes category(:title), :as => :category_title
indexes tags(:title), :as => :tag_title
has "IF(publish_to_blog = true AND sticky = false, true, false)", :as => :publish_to_main, :type => :boolean
has created_at
has updated_at, :type => :datetime
has recent_activity_at, :type => :datetime
has views_count, :type => :integer
has featured
has publish_to_blog
has sticky
set_property :delta => true
end

ドキュメントに従って、両方のテーブルにデルタ列を追加しました。私の問題は、デルタ インデックス作成がディスカッション モデルでのみ機能し、ユーザー モデルでは機能しないことです。例: ディスカッションの「タイトル」を更新すると、考えるスフィンクスがインデックスなどを回転させていることがわかります (ログから明らかなように)。しかし、ユーザーの「first_name」または「last_name」を更新しても、何も起こりません。

User モデルには、GroupsUser というモデルを介した has_many :through 関連付けもあります。次のように GroupsUser に after_save を設定しました。

def set_user_delta_flag
user.delta = true
user.save
end

これでも、 User モデルでデルタ インデックス作成がトリガーされるようには見えません。ディスカッション モデルの同様のセットアップは完全に機能します。なぜこれが起こっているのか誰にも教えてもらえますか?

4

1 に答える 1

0

わかりました。問題は属性定義にありました:

has user(:id)

定義から削除して再構築を実行すると、すべてが完全に機能するように見えました。

于 2010-04-09T20:56:15.873 に答える