创建子时,也创建父级

时间:2014-10-09 11:53:07

标签: ruby-on-rails ruby-on-rails-4

在我的项目中,我有两个模型:响应者(基本上是一个消息)&会话。 Responder是Conversation的孩子。我想要的是,如果用户创建新的响应者,它会自动为此响应者创建一个对话。 Conversation只有一个id。

如果管理员随后回复此响应者,则该响应者的conversation_id将与用户的响应者相同。

所以我想要的是:

  • 用户/管理员创建响应者(子),也创建对话(父)
  • 管理员/用户使用回复按钮,回复的回复者的对话.id被传递给新回应者。

我看了一下,发现了一些类似的问题。但它们并不是我想要的,我无法弄清楚如何构建它以便它对我有用。我觉得这是一件非常简单的事情,但我真的不知道如何以及从哪里开始。

Conversation.rb:

class Conversation < ActiveRecord::Base
  has_many :responders
end

Responder.rb:

class Responder < ActiveRecord::Base
  validates :title, :text, presence: true

  has_many :receivers
  belongs_to :company
  belongs_to :user
  belongs_to :conversation

end

我的响应者控制器可能会有所帮助:

class RespondersController < ApplicationController
    before_action :all_responders, only: [:index, :create]
    before_action :check_user
    respond_to :html, :js

    def show
        @responder = Responder.find(params[:id])
    end

    def new
        #@conversation = Conversation.new
        #@conversation.save #Works, but puts data in database before submitting the form
        @responder = Responder.new
    end

    def create
    @responder = Responder.new(responder_params)

    if @responder.save
        redirect_to root_path
    else
        render partial: "form", errors: responder.errors.full_messages
    end
end

private

    def check_user
        if !signed_in?
            redirect_to new_session_path
        end
    end

    def all_responders
        if current_user
            @companies = Company.all
            if current_user.administrator?
                @responders = Responder.where.not(:user_id => current_user.id)
            else
                @responders = Responder.where(:receiver => current_user.id)
            end
        end
    end

    def responder_params
        params.require(:responder).permit(:title, :text, :receiver, :sender_id, :company_id, :user_id, :conversation_id)
    end
end

邮件系统是独一无二的,管理员可以将邮件作为多个公司发送(从下拉列表中),用户只能向公司发送邮件。我也不想为此使用宝石。

提前致谢!

1 个答案:

答案 0 :(得分:1)

请尝试使用before_create回调在Responder类中创建对话。