質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Redmine

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

Q&A

解決済

1回答

524閲覧

redmineの自作プラグインにて

akstnhmyrw

総合スコア16

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Redmine

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

0グッド

1クリップ

投稿2017/07/29 04:53

編集2017/07/29 07:29

いつもお世話になっております。
最近、Rubyを始めたものですが、イマイチまだ文法に馴染めてません。
自作のプラグインを作成しているところで詰まりました・・・・。
(記事を作成・更新時にhookしてステータスと時間をチェックするプラグインです)

[plugin/XXXXXX/init.rb]

ruby

1require 'redmine' 2require 'dispatcher' unless Rails::VERSION::MAJOR >= 3 3 4Redmine::Plugin.register :test_plugin do 5(文字数割愛の為に省略) 6end 7 8if Rails::VERSION::MAJOR >= 3 9 ActionDispatch::Callbacks.to_prepare do 10 require_dependency 'issue' 11 unless Issue.included_modules.include? TestPlugin::IssuePatch 12 Issue.send(:include, TestPlugin::IssuePatch) 13 end 14 end 15else 16 Dispatcher.to_prepare do 17 require_dependency 'issue' 18 unless Issue.included_modules.include? TestPlugin::IssuePatch 19 Issue.send(:include, TestPlugin::IssuePatch) 20 end 21 end 22end

[lib/XXXXXX/issue_patch.rb]

ruby

1# -*- codind: utf-8 -*- 2module TestPlugin 3 module IssuePatch 4 5 def self.included(base) # :nodoc: 6 base.send(:include, InstanceMethods) 7 8 base.class_eval do 9 unloadable 10 before_save :test_plugin 11 end 12 end 13 14 module InstanceMethods 15 16 private 17 def test_plugin 18 is_status_change_check = false 19 is_error = false 20 21 check_estimated_hours = estimated_hours.to_f 22 unless id.nil? 23(記事の新規 or 更新によって時間を取得する処理) 24 end 25 26 if project.enabled_module_names.include?('test_plugin') 27 is_status_change_check = true 28 end 29 30↓ ☆質問☆ errors.addでエラー(赤枠メッセージ)は返せたのですが 31 elseの際に行いたい通常(緑枠メッセージ)が返せません。 32 何か良い方法はありまあすでしょうか?↓ 33 if status_id == 3 && check_total_spent_time == 0 34 if is_status_change_check 35 errors.add(:base, ::I18n.t('my_label')) 36 is_error = true 37 else 38 39 end 40 end 41 42 if is_error 43 return false; 44 else 45 return true; 46 end 47 end 48 end 49 end 50end

まだ、イマイチ、スコープ等が分かっておらず、flash[:notice]でメッセージを
出力しようとしたら下記のエラーとなりました。

お知恵を貸して頂けますと非常に助かります。。

~~~
NameError (undefined local variable or method flash' for #<Issue:0x007f97bf16cb88>): app/models/issue.rb:175:in create_or_update'
app/controllers/issues_controller.rb:497:in `block in save_issue_with_child_records'
~~~

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

このやり方が正しいかどうかは分からないのですが、
結果的にプラグイン側ではhookしてプロジェクトでモジュールが
ONになっていた時のみの処理を行うようにしました。

その上で正常系のflash[:notice]に関してはissueのController上で
(同様のロジックとはなりますが)別defを作成しメッセージを生成し
本来の「更新(またはチケット #~~ を作成)しました。」に生成したメッセージを
くっつけるような形で対応することとしました。

投稿2017/07/31 01:16

akstnhmyrw

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問