2014-10-09 121 views
0

在我的項目中我有兩個模型:響應者(基本上是一條消息)&對話。應答者是對話的孩子。我想要的是,如果用戶創建新的響應者,它會自動爲此響應者創建一個對話。對話只有一個ID。創建子時,也創建父項

如果管理員然後回覆此響應者,則此響應者的conversation_id將與用戶的響應者相同。

所以我想:

  • 用戶/管理員創建應答(孩子),也創造了談話(母公司)
  • 管理/用戶使用回覆按鈕,響應者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發送郵件ompany。我也不想爲此使用寶石。

在此先感謝!

回答

1

請用before_create回調嘗試在Responder類中創建對話。

+0

非常感謝!不知道這可以輕鬆完成。我這樣做是因爲當按下'reply'按鈕時,'conversation_id'在'link_to'傳遞給'new_responder_path',並且如果可用的話將被隱藏。然後在模型中,如果傳遞了conversation_id,則再次檢查'before_create'回調,如果沒有,則會創建它。它現在看起來很完美,謝謝! – Tijmenh 2014-10-20 10:52:55