Ruby on rails Rails-3多态关联;多态到多态关联有意义吗?

Ruby on rails Rails-3多态关联;多态到多态关联有意义吗?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,在我的应用程序中,我有用户、学校(组)和课程。我试图建立一个模型,根据这个模型,这三个模型中的任何一个都可以向任何其他模型发送请求,并给请求接收者一个接受或拒绝请求的选项。我的想法是建立一个多态到多态的关联,这样rails就可以识别请求发送者和接收者的id和类型。我的第一个问题是,设置一个poly-to-poly表来实现这个功能有意义吗,还是应该尝试一些不同的方法?如果多边形到多边形表有意义,我将当前控制器和db表包括在内: 我为请求设置的数据库表是: class CreateRequests

在我的应用程序中,我有用户、学校(组)和课程。我试图建立一个模型,根据这个模型,这三个模型中的任何一个都可以向任何其他模型发送请求,并给请求接收者一个接受或拒绝请求的选项。我的想法是建立一个多态到多态的关联,这样rails就可以识别请求发送者和接收者的id和类型。我的第一个问题是,设置一个poly-to-poly表来实现这个功能有意义吗,还是应该尝试一些不同的方法?如果多边形到多边形表有意义,我将当前控制器和db表包括在内:

我为请求设置的数据库表是:

class CreateRequests < ActiveRecord::Migration
  def change
    create_table :requests do |t|

      t.belongs_to :request_sender, polymorphic: true
      t.belongs_to :requestable , polymorphic: true

      t.timestamps
    end

    add_index :requests, [:request_sender_id, :request_sender_type]
    add_index :requests, [:requestable_id, :requestable_type]
  end
end

非常感谢任何帮助或指导,因为我对编程和rails都是新手,对我正在做的事情几乎一无所知。哈哈。

当然,没有理由不起作用

创建消息时,您需要发送创建者和接收者的类名和ID。假设您的表单发送:

  • 接收级
  • 接收机识别码
  • 发送器类
  • 发送者身份证
然后,在您的MessagesController中

def create
  message = Message.new.tap do |m|
    m.sender   = params[:sender_class].classify.constantize.find(params[:sender_id])
    m.receiver = params[:receiver_class].classify.constantize.find(params[:receiver_id])
    m.message  = params[:message]
  end
  if message.save
    redirect_to root_path, notice: "Awesome!"
  else
    render :new
  end
end
def create
  message = Message.new.tap do |m|
    m.sender   = params[:sender_class].classify.constantize.find(params[:sender_id])
    m.receiver = params[:receiver_class].classify.constantize.find(params[:receiver_id])
    m.message  = params[:message]
  end
  if message.save
    redirect_to root_path, notice: "Awesome!"
  else
    render :new
  end
end