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