【问题标题】:Doing notification controller in rails在 Rails 中做通知控制器
【发布时间】:2022-08-18 06:09:48
【问题描述】:

我是 Rails 的新手,我有一个问题。我正在编写一个 Rails 应用程序来组织小组活动。我已经实现了组通知的控制器(当一个新成员被包含到组中时,他/她收到了一个通知)。我想为创建的新投票创建通知机制。我需要一个新的控制器还是可以使用相同的控制器?

    标签: ruby-on-rails


    【解决方案1】:

    如果你真的想要自定义控制器,你当然可以。

    但是,我发现它们使事情变得更加混乱,因为它们不遵循标准结构,而且我经常忘记它们以及我制作它们的原因。


    我会尽力坚持让控制器与我的模型相匹配的做法。

    这是我构建应用程序的方式:

    楷模:

    • 成员(或者您可能称他们为用户)
    • 投票

    控制器:用于创建、显示、列出、更新、删除记录等操作

    • 成员控制器
    • 组控制器
    • 投票控制器

    当做的不仅仅是基本的CRUD 操作时,我会关注什么是“主”或“父”对象,看看我是否可以让它适合 CRUD 操作。

    所以让我们以你的例子为例将成员添加到组

    如果您有一个member 的表单,您可以在其中选择现有的group,或者甚至可以创建一个新的group,我会说member 是“主要”对象,我会使用MembersController#createMembersController#update 操作。我会使用accepts_nested_attributes

    class Member < ApplicationRecord
      has_many :groups
      accepts_nested_attributes_for :groups
    end
    

    如果您有相反的情况(添加或删除成员的group 表单),我会翻转它,使用带有嵌套属性的GroupsController#createGroupsController#update

    class Group < ApplicationRecord
      has_many :members
      accepts_nested_attributes_for :members
    end
    

    这样你的路线就非常标准:

    resources :members
    
    resources :groups
    
    resources :polls
    

    您可以将相同的逻辑用于投票通知。

    Poll 将是主要对象,因此您可以在 PollsController#createPollsController#update 中处理此逻辑


    如果你想摆脱RESTful routes,我仍然会使用这些控制器。

    例如。:

    # routes
    resources :members do
      get 'choose_group' #<- the view with the form to choose a group
      post 'add_to_group' #<- the controller action to receive the form data
    end
    
    # controller
    class MembersController < ApplicationController
      def choose_group
        @member = Member.find(params[:id]
        @groups = Group.all
      end
    
      def add_to_group
        @member = Member.find(params[:id]
        @member.groups << Group.find(params[:group_id]
        if @member.save
          redirect_to 'some/other/place'
        else
          render 'choose_group'
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多