3

Redmine の [ニュースの追加] ページにカスタム フィルター フィールドを追加して、新しいニュースを追加するときに、メールを送信するユーザーのグループを選択できるようにしたいと考えています。

フィールド自体は Redmine ユーザー グループのリストであり、すべてのユーザーが少なくとも 1 つのグループに割り当てられます。

誰もこれをやったことがありますか?任意の提案をいただければ幸いです

この問題に関連する 3 つのファイルを見つけました。

  • /app/controller/news_controller.rb
  • /app/models/news.rb
  • /app/views/news/_form.html.erb
環境:
  Redmine バージョン 2.2.1.stable.11156
  Ruby バージョン 1.8.7 (x86_64-linux)
  Rails バージョン 3.2.11
  環境制作
  データベース アダプタ MySQL
Redmine プラグイン:
  プラグインがインストールされていません

これまでのところ、すべての登録ユーザーに追加のニュースを送信する Redmine で 1 つの変更のみを行いました。ファイル: /app/modelsmailer.rb

概要:

http://www.lwks.com/images/custom/redmine_question.png

編集:あなたのアドバイスに従って、メーラー機能をコントローラーに移動しました:

  def create
    @news = News.new(:project => @project, :author => User.current)
    @news.safe_attributes = params[:news]
    @news.save_attachments(params[:attachments])

    if @news.save
      #news_added(@news)
      if params[:group]
        mail :to => GroupsUser.find(params[:group][:ids]).joins(:users).select("users.mail").compact,
            :subject => "[#{@news.project.name}] #{l(:label_news)}: #{@news.title}"
      else
        render :new
      end
    end
  end

しかし、エラーが発生します: NameError (uninitialized constant NewsController::GroupsUser): pointing to line

mail :to => GroupsUser.find
4

1 に答える 1

3

news_controller.rb:

def new
  @news = News.new
  @groups = GroupsUser.all
end

news / _form.html.erb:

<%= label_tag :group_ids "Groups"
<%= collection_select :group, :ids, @groups, :id, :name, {}, multiple: true %>

編集:

私はあなたのコントローラーがどのように見えるかについていくつか推測する必要がありますが、私はあなたに何か近いものを与えます。あなたが提供したメーラー関数に基づいて、それは保存されたcreate後にコントローラーから呼び出されたと思います。Newsその後、メール関数を呼び出します。このようなもの:

def create
  news = News.new(params[:news]
  if news.save
    news_added(news)
    send_mail_to_groups(params[:group][:ids]) if params[:group]
    redirect_to ...
  else
    render :new
  end
end

郵送部分はから削除する必要がありますnews_added

def news_added(news)
  redmine_headers 'Project' => news.project.identifier
  @author = news.author
  message_id news
  @news = news
  @news_url = url_for(:controller => 'news', :action => 'show', :id => news)
end

独自の新しいルーチンを支持して:

send_mail_to_users_by_group_ids(group_ids)
    # Woo: Sent to all users, despite their email settings
    mail :to => GroupsUser.find(group_ids).joins(:users).select("users.mail").compact,
      :subject => "[#{@news.project.name}] #{l(:label_news)}: #{@news.title}"
end

whereアクティブユーザーのみを含める句を追加することもできます。

そうだと思います。私は頭のてっぺんからそれをやっているので、おそらくタイプミスかエラーが1つか2つあります。うまくいけば、それはあなたを正しい方向に向けます。

于 2013-01-21T22:50:32.893 に答える