Redmine:用于添加新闻的自定义过滤器字段

时间:2013-01-15 14:20:43

标签: ruby-on-rails redmine redmine-plugins

我想在Redmine的“添加新闻”页面中添加自定义过滤器字段, 因此,当我添加新消息时,我可以选择要将电子邮件发送到的用户组。

字段本身是Redmine用户组的列表,每个用户至少分配了其中一个。

有人这样做过吗?任何建议将不胜感激

我找到了与问题相关的3个文件:

  • /app/controller/news_controller.rb
  • /app/models/news.rb
  • /app/views/news/_form.html.erb
Environment:
  Redmine version                          2.2.1.stable.11156
  Ruby version                             1.8.7 (x86_64-linux)
  Rails version                            3.2.11
  Environment                              production
  Database adapter                         MySQL
Redmine plugins:
  no plugin installed

到目前为止,我在Redmine中只做了一次修改,它向所有注册用户发送了添加的新闻。 文件:/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(未初始化的常量NewsController :: GroupsUser):指向行

mail :to => GroupsUser.find

1 个答案:

答案 0 :(得分:3)

news_controller.rb:

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

新闻/ _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子句以仅包含活动用户。

我认为这是正确的。我正在做这件事,所以可能有一个错字或错误或两个错误。希望它能指出你正确的方向。