开发者

How do I get Index-tank to do conditional indexing?

After a long conversation with the fine people at IndexTank, I was not really sure on how to fix my problem, and I was wondering if anyone could help me.

I have an article model that belongs to a user model. This article model also has a boolean attribute called anonymous, which, if set to true gives the user the option to post the article without his name being shown.

Article
belongs_to :user
attr_accesible :开发者_如何学运维anonymous, :user_id

User
has_many :articles

My problem is that if the article is posted as anonymous. I don't want tanker to search within the author name field, but I want it searching every other field. I tried to do this with an if else statement where I would normally put the "tankit" block, but that does not work.

Is there a way I could put the tankit block into a model method and use a validation call back like this?

def anon_index
    if self.anonymous
      tankit 'my_index' do
        indexes VARIABLES ETC BUT NOT the user_ attributes
      end
    else # if anonymous is false
      tankit 'my_index' do
        indexes :title
        indexes :body
        indexes :user_penname
        indexes :user_firstname
        indexes :user_lastname
      end
    end
  end

I was thinking either this or putting an if else statement where the "tankit" block declaration goes, but neither of those seem to, unless I'm doing something wrong.


how does this look?:

class Article < ActiveRecord::Base

 tankit 'my_index' do
       indexes :title
       indexes :body
       indexes :custom_penname
       indexes :custom_firstname
       indexes :custom_lastname
 end

 def custom_penname
   if self.anonymous
     'anonymous'
   else
     self.user_penname
   end
 end

 def custom_firstname
   #same for first name
 end
 def custom_lastname
   #same for last name
 end
end

Same approach, different scenario:

https://github.com/adrnai/rails-3-tanker-demo/blob/master/app/models/comment.rb

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜