在我的项目中,我有两个模型:响应者(基本上是一个消息)&会话。 Responder是Conversation的孩子。我想要的是,如果用户创建新的响应者,它会自动为此响应者创建一个对话。 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
邮件系统是独一无二的,管理员可以将邮件作为多个公司发送(从下拉列表中),用户只能向公司发送邮件。我也不想为此使用宝石。
提前致谢!
答案 0 :(得分:1)
请尝试使用before_create回调在Responder类中创建对话。