4

Redmine (v2.0.3) が動作するようになりました。すべてのプロジェクトのプロジェクト メニューに表示されるようになりましたが、選択したプロジェクトに対してのみ有効にする方法がわかりません。たとえば、プロジェクト カスタム フィールドが特定の値に設定されているプロジェクトのみ。カスタム フィールドを作成し、データの保存場所を特定しました。しかし、プロジェクト メニューにプラグインを表示するかどうかを Redmine に伝えるにはどうすればよいでしょうか?

:if を使用して proc を指定する可能性に遭遇しましたが、その proc では、プラグインで作成されたモデルのいずれかのメソッドを呼び出すことができません。たとえば、Param というモデルを作成し、Param.check_to_display メソッドを呼び出したいとします。しかし、エラーメッセージが表示されます

ActionView::Template::Error (undefined method 'check_to_display' for Param(....):Class)

私のinit.rbは言う:

menu :project_menu, :info, {:controller=>'info', :action=>'index'}, :caption=>'Ticker', :after=>:activity, :param=>:project_id, :if=>Proc.new{||Param.check_to_display()}
4

1 に答える 1

2

なんて恥ずかしい、単純な間違い。check_to_displayメソッドを次のように定義しました。

def check_to_display

明らかにそうあるべきだった

def self.check_to_display

そして、トータルコードに興味がある人のために:

class Param < ActiveRecord::Base
  unloadable

  def self.check_to_display(p)
    cf = CustomField.where("type='ProjectCustomField' and name='THE_FLAG'").first
    return false if cf.nil?
    return false if p.nil?
    cv = CustomValue.where("customized_type='Project' and customized_id=? and custom_field_id=?",p.id,cf.id).first
    return false if cv.nil?
    return false if cv.value.nil?
    cv.value.strip!
    return cv.value != ""
  end
end

忘れないでください。init.rbは次のようになります。

menu :project_menu, :info, {:controller=>'info', :action=>'index'}, :caption=>'Ticker', :after=>:activity, :param=>:project_id, :if=>Proc.new{|p|Param.check_to_display(p)}
于 2012-08-09T12:39:09.083 に答える