diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2e2c7ff56..7aa89dbd7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -243,7 +243,6 @@ class ApplicationController < ActionController::Base # 测试版前端需求 - logger.info("######domain: #{request.host}") if request.host == "47.96.87.25" if params[:debug] == 'teacher' #todo 为了测试,记得讲debug删除 User.current = User.find 81403 diff --git a/app/controllers/discusses_controller.rb b/app/controllers/discusses_controller.rb index 3b987be51..6a270f619 100644 --- a/app/controllers/discusses_controller.rb +++ b/app/controllers/discusses_controller.rb @@ -1,7 +1,7 @@ class DiscussesController < ApplicationController LIMIT = 10 before_action :find_container, only: [:index, :hidden] - before_action :find_discuss, except: [:create, :index, :new_message, :reward_code] + before_action :find_discuss, except: [:create, :index, :new_message, :reward_code, :forum_discusses] def index page = params[:page].to_i @@ -28,6 +28,48 @@ class DiscussesController < ApplicationController @current_user = current_user end + def forum_discusses + page = params[:page] || 1 + limit = params[:limit] || 15 + offset = (page.to_i-1) * limit + search = params[:search] + tag = params[:tag_repertoire_id] + sql, sql1, sql2 = '', '', '' + sql1 = + unless search.blank? + "and d.content like '%#{search}%'" + end + + sql2 = + if tag + shixun_ids = ShixunTagRepertoire.where(:tag_repertoire_id => tag).pluck(:shixun_id) + "and d.dis_id in(#{shixun_ids.join(",")})" + end + + sql = "select d.id from discusses d join shixuns s on d.dis_id = s.id where s.status = 2 and s.hidden = false and d.root_id is null + and d.hidden = false #{sql1} #{sql2} order by d.created_at desc" + + memo_ids = Discuss.find_by_sql(sql).pluck(:id) + @memo_count = memo_ids.size + memo_ids = memo_ids[offset, limit] + order_ids = memo_ids.size > 0 ? memo_ids.join(',') : -1 + @memos = Discuss.where(id: memo_ids).order("field(id,#{order_ids})").includes(:praise_treads, dis: :tag_repertoires, user: :user_extension) + # @memos = memos.includes(:praise_treads, user: :user_extension).page(page).per(limit) + # 实训标签使用最多的9个 + # @hot_tags = TagRepertoire.find_by_sql("select distinct(a.name), a.id from + # (select tr.id, tr.name, count(d.dis_id) cnt + # from tag_repertoires tr join (shixun_tag_repertoires str + # left join (shixuns s join discusses d on d.dis_id = s.id) + # on s.id = str.shixun_id) on tr.id = str.tag_repertoire_id + # group by d.dis_id order by cnt desc) a limit 9").map{|ht| ht.attributes.dup} + tag_id = ShixunTagRepertoire.joins(:shixun).order("myshixuns_count desc").pluck(:tag_repertoire_id).uniq.first(9) + @hot_tags = TagRepertoire.select([:id, :name]).where(id: tag_id).order("FIELD(id, #{tag_id.join(",")})").map{|ht| ht.attributes.dup} if tag_id + + @memos = DiscussesService.new.memo_list @memos + @hot_memos = Memo.field_for_recommend.posts.hot.includes(:tag_repertoires).limit(4) + @recommend_shixuns = DiscussesService.new.recommends + end + def new_message onclick_time = Myshixun.find(params[:myshixun_id]).try(:onclick_time) ids = Discuss.where(user_id: User.current.id, dis_id: params[:container_id], dis_type: params[:container_type]). diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index f7906ecda..603a59920 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -336,7 +336,7 @@ class HomeworkCommonsController < ApplicationController @messages = @messages.parent_comment end - @messages = @messages.page(@page).per(@limit).order("created_on desc") + @messages = @messages.includes(:praise_treads).page(@page).per(@limit).order("created_on desc") end def reference_answer diff --git a/app/controllers/memos_controller.rb b/app/controllers/memos_controller.rb index 869d787db..965f78135 100644 --- a/app/controllers/memos_controller.rb +++ b/app/controllers/memos_controller.rb @@ -1,5 +1,8 @@ class MemosController < ApplicationController before_action :set_memo, only: [:show, :edit, :update, :destroy] + before_action :validate_memo_params, only: [:create, :update] + before_action :owner_or_admin, only: [:edit, :update, :destroy] + before_action :is_admin, only: [] include ApplicationHelper # GET /memos @@ -8,27 +11,21 @@ class MemosController < ApplicationController @user = current_user @memos = Memo.all s_order = (params[:order] == "replies_count" ? "all_replies_count" : params[:order]) || "updated_at" - #@tidding_count = unviewed_tiddings(current_user) if current_user.present? - page = params[:page].to_i + # @tidding_count = unviewed_tiddings(current_user) if current_user.present? + page = params[:page] || 1 + limit = params[:limit] || 15 search = params[:search] - offset = page * 15 forum_id = params[:forum] - user_id = params[:user_id] - if user_id == -1 - user_id = current_user.try(:id) - end tag_repertoire_id = params[:tag_repertoire_id] sql = if forum_id - search ? "forum_id = #{forum_id} and root_id is null and subject like '%#{search}%'" : + !search.blank? ? "forum_id = #{forum_id} and root_id is null and subject like '%#{search}%'" : "forum_id = #{forum_id} and root_id is null" - elsif search - user_id ? "author_id = #{user_id.to_i} and forum_id in(3, 5) and root_id is null and subject like '%#{search}%'" : - "forum_id in(3, 5) and root_id is null and subject like '%#{search}%'" + elsif !search.blank? + "forum_id in(3, 5) and root_id is null and subject like '%#{search}%'" else - user_id ? "author_id = #{user_id.to_i} and forum_id in(3, 5) and root_id is null" : - "forum_id in(3, 5) and root_id is null" + "forum_id in(3, 5) and root_id is null" end if tag_repertoire_id @@ -41,27 +38,27 @@ class MemosController < ApplicationController sql += " and all_replies_count != 0" end - memos = Memo.field_for_list.includes(:praise_tread, :author).where("#{sql}") + memos = Memo.field_for_list.where("#{sql}") @memos_count = memos.length - @memos = memos.order("sticky = 1 desc, #{Memo.table_name}.#{s_order} desc").offset(offset).limit(15) - @my_memos_count = Memo.user_posts(current_user.try(:id)).count + @memos = memos.order("sticky = 1 desc, #{Memo.table_name}.#{s_order} desc").page(page).per(limit) + @memos = @memos.includes(:praise_treads, :tag_repertoires, author: :user_extension) + # @my_memos_count = Memo.user_posts(current_user.try(:id)).count @tags_info = MemoTagRepertoire.find_by_sql("SELECT tag_repertoire_id, tr.name, count(*) cnt FROM memo_tag_repertoires mtr join tag_repertoires tr on tr.id = mtr.tag_repertoire_id group by tag_repertoire_id order by cnt desc, tag_repertoire_id desc limit 9") - @hot_memos = Memo.field_for_recommend.posts.hot.limit(4) + @hot_memos = Memo.field_for_recommend.posts.hot.includes(:tag_repertoires).limit(4) + @recommend_shixuns = DiscussesService.new.recommends end - # GET /memos/1 # GET /memos/1.json def show # tidding_count = unviewed_tiddings(current_user) if current_user @user = current_user - # TODO 附件最后再做 - # attachments_list = @memo.update_column(:viewed_count, @memo.viewed_count+1) - @memos = @memo.reply_for_memo.includes(:praise_tread, :author).order("created_at desc").limit(10) - + @memos = @memo.reply_for_memo.includes(:praise_treads, author: :user_extension).order("created_at desc").limit(10) + @attachments = @memo.attachments + @recommend_shixuns = DiscussesService.new.recommends end # GET /memos/new @@ -71,43 +68,44 @@ class MemosController < ApplicationController # GET /memos/1/edit def edit + @tag_list = TagRepertoire.field_for_list.order("name asc") + @memo_tags = @memo.tag_repertoires.field_for_list + @attachments = @memo.attachments end - # POST /memos # POST /memos.json def create ActiveRecord::Base.transaction do begin @memo = Memo.new(memo_params) @memo.author = current_user - # TODO 保存附件 - # @memo.save_attachments(params[:attachments]) if params[:attachments] @memo.save! + Attachment.associate_container(params[:attachment_ids], @memo.id, @memo.class.name) params[:tags].each do |tag| - MemoTagRepertoire.create(:memo_id => @memo.id, :tag_repertoire_id => tag) + MemoTagRepertoire.create!(memo_id: @memo.id, tag_repertoire_id: tag) end - @status = 0 - @message = "帖子创建成功!" + normal_status("帖子创建成功") rescue Exception => e - @status = -1 - @message = "帖子创建失败,原因:#{e}" + tip_exception("帖子创建失败,原因:#{e}") raise ActiveRecord::Rollback end end - - end - # PATCH/PUT /memos/1 # PATCH/PUT /memos/1.json def update - respond_to do |format| - if @memo.update(memo_params) - format.html { redirect_to @memo, notice: 'Memo was successfully updated.' } - format.json { render :show, status: :ok, location: @memo } - else - format.html { render :edit } - format.json { render json: @memo.errors, status: :unprocessable_entity } + ActiveRecord::Base.transaction do + begin + @memo.update_attributes!(memo_params) + Attachment.associate_container(params[:attachment_ids], @memo.id, @memo.class.name) + @memo.memo_tag_repertoires.destroy_all + params[:tags].each do |tag| + MemoTagRepertoire.create!(memo_id: @memo.id, tag_repertoire_id: tag) + end + normal_status("帖子更新成功") + rescue Exception => e + tip_exception("帖子更新失败,原因:#{e}") + raise ActiveRecord::Rollback end end end @@ -116,21 +114,33 @@ class MemosController < ApplicationController # DELETE /memos/1.json def destroy @memo.destroy - respond_to do |format| - format.html { redirect_to memos_url, notice: 'Memo was successfully destroyed.' } - format.json { head :no_content } - end + normal_status("删除成功") end private - # Use callbacks to share common setup or constraints between actions. - def set_memo - @memo = Memo.find(params[:id]) - end + # Use callbacks to share common setup or constraints between actions. + def set_memo + @memo = Memo.find(params[:id]) + end - # Never trust parameters from the scary internet, only allow the white list through. - def memo_params - params.fetch(:memo, {}) - end + def owner_or_admin + tip_exception(403, "无权限操作") unless @memo.author == current_user || current_user.admin? || current_user.business? + end + + def is_admin + tip_exception(403, "无权限操作") unless current_user.admin? || current_user.business? + end + + # Never trust parameters from the scary internet, only allow the white list through. + def memo_params + params.require(:memo).permit(:subject, :content, :forum_id) + end + + def validate_memo_params + tip_exception("话题名称不能为空") if params[:subject].blank? + tip_exception("话题内容不能为空") if params[:content].blank? + tip_exception("话题类型不能为空") if params[:forum_id].blank? + tip_exception("技术标签不能为空") if params[:tags].blank? + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5df86ef54..7e9fd652b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -329,6 +329,23 @@ module ApplicationHelper content end + def strip_html(text, len=0, endss="...") + ss = "" + if !text.nil? && text.length>0 + ss=text.gsub(/<\/?.*?>/, '').strip + ss = ss.gsub(/ */, '') + ss = ss.gsub(/\r\n/,'') #新增 + ss = ss.gsub(/\n/,'') #新增 + if len > 0 && ss.length > len + ss = ss[0, len] + endss + elsif len > 0 && ss.length <= len + ss = ss + #ss = truncate(ss, :length => len) + end + end + ss + end + def strip_export_title(content) con_ = "" if content.length > 0 diff --git a/app/models/discuss.rb b/app/models/discuss.rb index 2d9c00110..a50b18a6f 100644 --- a/app/models/discuss.rb +++ b/app/models/discuss.rb @@ -8,6 +8,7 @@ class Discuss < ApplicationRecord has_many :praise_treads, as: :praise_tread_object, dependent: :destroy has_many :tidings, as: :container, dependent: :destroy has_one :praise_tread_cache, as: :object, dependent: :destroy + belongs_to :dis, polymorphic: true belongs_to :challenge after_create :send_tiding @@ -44,6 +45,10 @@ class Discuss < ApplicationRecord Discuss.where(parent_id: self.id).includes(:user).reorder(created_at: :asc) end + def child_discuss_count + Discuss.where(root_id: id).count + end + private def send_tiding diff --git a/app/models/memo.rb b/app/models/memo.rb index 4dc153c81..e70a7cec9 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -6,7 +6,7 @@ class Memo < ApplicationRecord has_many :memo_tag_repertoires, dependent: :destroy has_many :tag_repertoires, :through => :memo_tag_repertoires - has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_many :praise_treads, as: :praise_tread_object, dependent: :destroy has_one :praise_tread_cache, as: :object, dependent: :destroy belongs_to :author, class_name: 'User', foreign_key: 'author_id' @@ -14,6 +14,7 @@ class Memo < ApplicationRecord has_many :descendants, foreign_key: :root_id, class_name: 'Memo' has_many :children, foreign_key: :parent_id, class_name: 'Memo' + has_many :attachments, as: :container, dependent: :destroy scope :field_for_list, lambda{ select([:id, :subject, :author_id, :sticky, :updated_at, :language, :reward, :all_replies_count, :viewed_count, :forum_id]) diff --git a/app/models/user.rb b/app/models/user.rb index ed9d70c00..b453f9998 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -440,7 +440,7 @@ class User < ApplicationRecord end def manager_of_memo?(memo) - id == memo.author_id || admin? + id == memo.author_id || admin? || business? end # 是否是项目管理者 diff --git a/app/services/discusses_service.rb b/app/services/discusses_service.rb index 91fa523c9..c14850a4c 100644 --- a/app/services/discusses_service.rb +++ b/app/services/discusses_service.rb @@ -148,30 +148,6 @@ class DiscussesService @discuss = Discuss.select([:id, :hidden, :reward, :dis_type, :dis_id, :position, :challenge_id, :root_id]).find(id) end - protected - def memo_list memos - memos.map do |m| - user = User.find(m.user_id) - praise_count = m.praise_tread.where(:praise_or_tread => 1).count - replies_count = Discuss.where(:root_id => m.id).count - shixun_tag = m.dis.tag_repertoires.map(&:name) - m.attributes.dup.except("user_id", "dis_id", "dis_type", "root_id").merge({ - subject: (message_content m.content), - username: user.show_name, - login: user.login, - praise_count: praise_count, - replies_count: replies_count, - image_url: url_to_avatar(user), - shixun_tag: shixun_tag, - tpm_url: "/shixuns/#{m.dis.identifier}/shixun_discuss" - }) - end - end - - def format_for_current_user current_user - {username: current_user.show_name, login: current_user.login, user_id: current_user.id, image_url: url_to_avatar(current_user), admin: current_user.admin?} - end - def recommends hot_shixuns = Shixun.field_for_recommend.published.order("myshixuns_count desc").limit(2) newest_shixuns = Shixun.field_for_recommend.published.order("created_at desc").limit(2) @@ -185,6 +161,30 @@ class DiscussesService return recommend_shixuns end + def memo_list memos + memos.map do |m| + user = m.user + # praise_count = m.praise_treads.select{|pt| pt.praise_or_tread == 1}.count + replies_count = m.child_discuss_count + shixun_tag = m.dis.tag_repertoires.map(&:name) + m.attributes.dup.except("user_id", "dis_id", "dis_type", "root_id", "praise_count", "content").merge({ + subject: (message_content m.content), + username: user.full_name, + login: user.login, + replies_count: replies_count, + image_url: url_to_avatar(user), + shixun_tag: shixun_tag, + tpm_url: "/shixuns/#{m.dis.identifier}/shixun_discuss" + }) + end + end + + protected + + def format_for_current_user current_user + {username: current_user.show_name, login: current_user.login, user_id: current_user.id, image_url: url_to_avatar(current_user), admin: current_user.admin?} + end + # 将数据库对象转换成哈希对象 def object_to_hash objects objects.map{|o| o.attributes.dup} diff --git a/app/views/discusses/forum_discusses.json.jbuilder b/app/views/discusses/forum_discusses.json.jbuilder new file mode 100644 index 000000000..3b1aefd89 --- /dev/null +++ b/app/views/discusses/forum_discusses.json.jbuilder @@ -0,0 +1,27 @@ +json.memo_list @memos +# do |memo| +# json.(memo, :id, :updated_at, :reward) +# json.subject message_content(memo.content) +# json.praise_count memo.praises_count +# json.replies_count memo.child_discuss_count +# json.shixun_tag memo.dis.tag_repertoires.map(&:name) +# json.username memo.user.full_name +# json.login memo.user.login +# json.image_url url_to_avatar(memo.user) +# json.tpm_url "/shixuns/#{memo.dis.identifier}/shixun_discuss" +# end + +json.memo_count @memo_count + +json.hot_memos do + json.array! @hot_memos do |hm| + json.(hm, :id, :subject, :language, :forum_id) + json.replies_count hm.all_replies_count + # json.praise_count hm.praise_tread.praise_count + json.tag hm.tag_repertoires.map(&:name) + end +end + +json.hot_tags @hot_tags + +json.recommend_shixuns @recommend_shixuns \ No newline at end of file diff --git a/app/views/graduation_topics/_graduation_comments.json.jbuilder b/app/views/graduation_topics/_graduation_comments.json.jbuilder index 1d49d450f..ee9ed7529 100644 --- a/app/views/graduation_topics/_graduation_comments.json.jbuilder +++ b/app/views/graduation_topics/_graduation_comments.json.jbuilder @@ -10,7 +10,7 @@ json.hidden message.hidden if message.m_parent_id json.can_delete message.can_delete(identity) else - json.praise_count message.praise_treads.liker.count - json.user_praise message.praise_treads.user_liker(current_user).count + json.praise_count message.praise_treads.select{|pt| pt.praise_or_tread == 1}.count + json.user_praise message.praise_treads.select{|pt| pt.praise_or_tread == 1 && user_id == current_user.id}.count json.child_message_count message.m_reply_count end diff --git a/app/views/memos/_memo.json.jbuilder b/app/views/memos/_memo.json.jbuilder index 22adba5fc..12de7beb5 100644 --- a/app/views/memos/_memo.json.jbuilder +++ b/app/views/memos/_memo.json.jbuilder @@ -3,6 +3,5 @@ json.(memo, :id, :subject, :is_md, :content, :sticky, :reward, :viewed_count) json.tag memo.tag_repertoires.map(&:name) json.time memo.created_at json.replies_count memo.all_replies_count -json.attachments_list [] -json.user_praise memo.praise_tread.user_liker(@user.try(:id)) ? true : false -json.memo_praise_count = memo.praise_tread.liker.count +json.user_praise memo.praise_treads.user_liker(@user.try(:id)) ? true : false +json.memo_praise_count memo.praise_treads.liker.count diff --git a/app/views/memos/_memo_list.json.jbuilder b/app/views/memos/_memo_list.json.jbuilder index 8da056e92..1f45070a1 100644 --- a/app/views/memos/_memo_list.json.jbuilder +++ b/app/views/memos/_memo_list.json.jbuilder @@ -1,7 +1,7 @@ json.(memo, :id, :subject, :author_id, :sticky, :updated_at, :language, :reward, :all_replies_count, :viewed_count, :forum_id) -json.praise_count memo.praise_tread.praise_count +json.praise_count memo.praise_treads.liker.count json.replies_count memo.all_replies_count json.tag memo.tag_repertoires.map(&:name) json.user_name memo.author.full_name diff --git a/app/views/memos/_replies_list.json.jbuilder b/app/views/memos/_replies_list.json.jbuilder index 3dae61813..9122d3420 100644 --- a/app/views/memos/_replies_list.json.jbuilder +++ b/app/views/memos/_replies_list.json.jbuilder @@ -7,8 +7,8 @@ json.username memo.author.full_name json.reward memo.reward json.hidden memo.hidden json.permission @user.manager_of_memo?(memo) -json.praise_count memo.praise_tread.liker.count -json.user_praise memo.praise_tread.select{|pt| pt.user_id == @user.id}.length > 0 +json.praise_count memo.praise_treads.select{|pt| pt.praise_or_tread == 1}.count +json.user_praise memo.praise_treads.select{|pt| pt.praise_or_tread == 1 && pt.user_id == @user.id}.length > 0 json.user_login memo.author.login json.admin @user.admin diff --git a/app/views/memos/edit.json.jbuilder b/app/views/memos/edit.json.jbuilder new file mode 100644 index 000000000..f3d3f3724 --- /dev/null +++ b/app/views/memos/edit.json.jbuilder @@ -0,0 +1,7 @@ +json.(@memo, :subject, :content, :forum_id) +json.memo_tags @memo_tags +json.attachments @attachments do |attachment| + json.partial! "attachments/attachment_simple", locals: {attachment: attachment} +end +json.tag_list @tag_list +json.forums forum_list diff --git a/app/views/memos/index.json.jbuilder b/app/views/memos/index.json.jbuilder index 8a90e374a..e004f7ea7 100644 --- a/app/views/memos/index.json.jbuilder +++ b/app/views/memos/index.json.jbuilder @@ -8,22 +8,30 @@ # tidding_count: 消息数 # # -json.memo_list do - json.array! @memos do |memo| - json.partial! "memos/memo_list", locals: {memo: memo} - end +json.memo_list @memos do |memo| + json.(memo, :id, :subject, :sticky, + :updated_at, :language, :reward, + :viewed_count, :forum_id) + json.praise_count memo.praise_treads.select{|pt| pt.praise_or_tread == 1}.count + json.replies_count memo.all_replies_count + json.tag memo.tag_repertoires.map(&:name) + json.user_name memo.author.full_name + json.login memo.author.login + json.image_url url_to_avatar(memo.author) end json.memo_count @memos_count json.hot_memos do json.array! @hot_memos do |hm| - json.(hm, :id, :subject, :language, :forum_id, :all_replies_count) + json.(hm, :id, :subject, :language, :forum_id) json.replies_count hm.all_replies_count - json.praise_count hm.praise_tread.praise_count + # json.praise_count hm.praise_tread.praise_count json.tag hm.tag_repertoires.map(&:name) end end json.hot_tags @tags_info.map{|o| o.attributes.dup.except("cnt", "id")} +json.recommend_shixuns @recommend_shixuns + diff --git a/app/views/memos/new.json.jbuilder b/app/views/memos/new.json.jbuilder index 47c023ea0..c35066023 100644 --- a/app/views/memos/new.json.jbuilder +++ b/app/views/memos/new.json.jbuilder @@ -1,3 +1,2 @@ json.tag_list @tag_list -json.forums @csrf_token - +json.forums forum_list \ No newline at end of file diff --git a/app/views/memos/show.json.jbuilder b/app/views/memos/show.json.jbuilder index 7acd6ba4a..1f7840983 100644 --- a/app/views/memos/show.json.jbuilder +++ b/app/views/memos/show.json.jbuilder @@ -1,5 +1,9 @@ json.partial! "memos/memo", memo: @memo +json.attachments_list @attachments do |attachment| + json.partial! "attachments/attachment_simple", locals: {attachment: attachment} +end + json.memo_replies do json.array! @memos do |memo| json.partial! "memos/replies_list", memo: memo @@ -9,10 +13,11 @@ end json.author_info do json.username @memo.author.full_name # TODO watched_by 插件没法用,等把lib文件载入后在打开代码 - #json.watched @memo.author.watched_by?(@user) + json.watched @user.watched?(@memo.author) json.image_url url_to_avatar(@memo.author) json.identity @memo.author.identity json.login @memo.author.login json.user_id @memo.author.id end +json.recommend_shixuns @recommend_shixuns \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 581f563b0..1a573a3c2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,7 +20,16 @@ Rails.application.routes.draw do put 'commons/unhidden', to: 'commons#unhidden' delete 'commons/delete', to: 'commons#delete' - resources :memos + resources :memos do + member do + + end + + collection do + + end + end + resources :tem_tests # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # @@ -222,6 +231,7 @@ Rails.application.routes.draw do resources :discusses do collection do get :new_message + get :forum_discusses end member do