2011年08月25日

知識DBプラグインに検索機能を!失敗その2

知識DBプラグインに検索機能を!失敗編その1
の続きです.


前回は,Redmineの知識データベースプラグインに検索機能を追加する方法として,Xapianに挑戦し,挫折しましたが,今回は別の挫折.
これは,http://www.redmine.org/issues/8215 で述べられている対応待ちまでの暫定対処となります.

以下のリンクに書いてあるとおりなのですが,Knowledgebaseプラグインのコードをちょっといじります.


http://www.redmine.org/boards/3/topics/11643?r=23597

これで出来ているのかなぁ.無事,出来ましたー(2011/08/24.)

以下,修正箇所.■1. app/controllers/articles_controller.rb を修正

1
2 --- a/app/controllers/articles_controller.rb
3 +++ b/app/controllers/articles_controller.rb
4 @@ -21,6 +21,7 @@ class ArticlesController < KnowledgebaseController
5 @article = Article.new(params[:article])
6 @article.category_id = params[:category_id]
7 @article.author_id = User.current.id
8 + @article.project_id = 31
9 if @article.save
10 attachments = attach(@article, params[:attachments])
11 # XXX Commented this out for now as it's not available in the


ここでハードコーディングの31は,このユーザさんが作ったプロジェクトIDだと思うのだけどどうなんでしょう?自分は1 を記入しました.



■2. app/models/kb_article.rb

1 --- a/app/models/article.rb
2 +++ b/app/models/article.rb
3 @@ -16,7 +21,8 @@ class Article < ActiveRecord::Base
4 acts_as_searchable :columns => [ "kb_articles.title", "kb_articles.content"],
5 :include => [ :project ],
6 :order_column => "kb_articles.id",
7 - :permission => nil
8 + :permission => nil,
9 + :date_column => "#{table_name}.created_at"
10
11 acts_as_event :title => Proc.new { |o| "#{l(:label_title_articles)} ##{o.id}: #{o.title}" },


ここはなんで,これが必要なのかよくわかっていません.


■3. 2. と同じ.kb_article.rb

おそらく,今のプラグインはこの対応はされているとおみます.
set_table_name をarticles からkb_articles に変更します.

1 class Article < ActiveRecord::Base
2 unloadable
3
4 set_table_name "kb_articles" # changes the default table name
5
6 validates_presence_of :title
7 validates_presence_of :category_id
8



あと,適当にこのメソッドも入れておきます.削除用?

1 def self.table_name() "kb_articles" end*



以上で出来てる人がいるようなのだけど,自分は出来ませんでした.うーん..

って,このブログ書きながら諦めきれずに試していたらできました〜♪
やっほー.以下に,上記以外に必要な作業を書きます.

■1. で追記した,project_id は一番よく使うプロジェクトのIDか,"1"がよいと思います.自分は,IDは,データベースから調べました.

例えば,検索するとき,「全プロジェクト」「マイプロジェクト」「プロジェクトAとサブプロジェクト」「プロジェクトA」と選べると思うのですが,存在するIDならば,「全プロジェクト」を検索対象とすることでヒットしますし,■1.でハードコーディングした数値のプロジェクトが含まれるのならば,検索対象となります.
"1"なら,(過去に削除していない限り)必ず含まれているのではないでしょうか.
逆に,存在しないIDだったら検索されません.まぁ,そうですね (^^;

もう一つ,行ったことは,データベースの修正です.
kb_articles のテーブルの持つ"project_id"のキーを修正します.恐らく,0が入っていると思うのでこれを,■1. でハードコーディングした数値と同じ値をセットすれば,検索に引っかかるようになります.

このテーブルにproject_id の項目自体がないよという場合は,上記修正入れた後に,一つArticleを作成すれば,作られているかともいます.






ちなみに,いまHaskell勉強会のUst見ながらだったので,もう頭の中ごちゃごちゃ..
posted by maplewine at 13:00| Comment(0) | TrackBack(0) | ruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック