2014-10-09 4 views
0

В моем проекте у меня есть две модели: ответчик (который в основном является сообщением) & Разговор. Ответчик - ребенок Разговора. Я хочу, чтобы, если пользователь создает нового ответчика, он автоматически создает беседу для этого ответчика. В разговоре есть только идентификатор.При создании ребенка также создайте родителя

Если администратор затем отвечает на этом ответчике, этот_ответчик для этого ответчика будет таким же, как и ответчик пользователя.

Так что я хочу:

  • Пользователя/администратор создает ответчик (ребенок), а также создать разговор (родительский)
  • Администратора/пользователь использует кнопку ответа, conversation.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 

Почтовая система уникальна, где есть администратор, который отправляет письма как несколько компаний (из выпадающего списка), и пользователи могут отправлять почту только на c п е к т. Я также не хочу использовать камни для этого.

Заранее благодарен!

ответ

1

Попробуйте использовать обратный вызов before_create для создания разговора в классе ответчика.

+0

Спасибо большое! Не знал, что это можно сделать так легко. Я сделал это, нажав кнопку 'reply',' chat_id' передается в 'link_to' в' new_responder_path' и помещается в скрытую форму, если таковая имеется. Затем в модели я проверяю с обратным вызовом 'before_create' еще раз, если передается цепочка session_id, если она не создается. Похоже, теперь он отлично работает, спасибо! – Tijmenh

Смежные вопросы