【问题标题】:Call 2 post controller methods on single form submission in rails在 Rails 中的单个表单提交上调用 2 个后控制器方法
【发布时间】:2015-04-22 14:50:36
【问题描述】:

我有一个用例,我需要在单个表单提交时创建 2 个元组(一个在 Invitation 中,一个在 Notification 表中)(操作指向 Invitation#create)。 如何从 Invitation create 调用 Notification create 方法以在 Notification 表中创建新元组。

PS:邀请和通知之间没有关系。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord model-view-controller form-submit


    【解决方案1】:

    您不会进入通知创建操作,只需在邀请创建中进行。下面的代码将使用共享关注方法,如下所述:

    class InvitationsController < ApplicationController
        include Notifications
    
        #....
    
        def create
            invitation = Invitiation.create(invitation_params)
            create_notification(invitation)
        end
    
        private
    
        def invitation_params
            # strong params code
        end
    end
    

    因此,如果您有第二个控制器/模型,例如 Rsvp:

    class RsvpsController < ApplicationController
        include Notifications
    
        #....
    
        def create
            rsvp = Rsvp.create(rsvp_params)
            create_notification(rsvp)
        end
    
        private
    
        def rsvp_params
            # strong params code
        end
    end
    

    然后在 controllers/concerns 目录下,你可以创建一个文件 'notifications.rb'

    module Notifications
      extend ActiveSupport::Concern
    
      def create_notification(object)
        Notification.create(object_id: object.id, object_type: object_type)
      end
    end
    

    【讨论】:

    • 谢谢,是的,这将在多个控制器中使用。那么,该创建方法将在通知控制器中吗?我需要一条路线吗?如果可能的话,你能给我一个小sn-p吗?
    • 不,不会有第二条路线,表单将发布到 Invitations create ,在那里您将直接通过模型方法创建通知。您永远不会从帖子中执行两个控制器操作。
    • 当我说多个控制器时,我的意思是如果您需要跨多个控制器创建通知 - 例如,如果您有 Invitation 和 Rsvp 模型/控制器,并且它们都需要通知,您可以创建可以在这两个控制器中使用的共享方法。该方法将直接通过模型创建通知。
    • 如果使用关注点,您需要将其包含在您的控制器中。include Notifications
    • 哎呀,你当然是对的,谢谢。我已经更新了我的答案。
    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 2017-07-03
    • 2021-01-30
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    相关资源
    最近更新 更多