我想在Redmine的“添加新闻”页面中添加自定义过滤器字段, 因此,当我添加新消息时,我可以选择要将电子邮件发送到的用户组。
字段本身是Redmine用户组的列表,每个用户至少分配了其中一个。
有人这样做过吗?任何建议将不胜感激
我找到了与问题相关的3个文件:
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
编辑:根据您的建议,我将邮件程序功能移至控制器:
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
答案 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
子句以仅包含活动用户。
我认为这是正确的。我正在做这件事,所以可能有一个错字或错误或两个错误。希望它能指出你正确的方向。