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