2014-10-09 117 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