私のアプリには、ユーザー、学校 (グループ)、およびコースがあります。これら3つのモデルのいずれかが他のモデルにリクエストを送信し、リクエスト受信者にリクエストを受け入れるか拒否するかを選択できるモデルを設定しようとしています。私が考えていたのは、ポリモーフィックからポリモーフィックへの関連付けを設定して、Rails が request_sender とレシーバーの 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
これは私のリクエストコントローラーです。私が抱えている問題は、リクエストの送信者と受信者の両方のクラスを決定するメソッドを定義することです:
def new
@request = @requestable.requests.new
end
def create
@request = @requestable.requests.new(params[:request])
if @request.save
redirect_to @requestable, notice: "requested."
else
render :new
end
end
private
def load_requestable
klass = [School, User, Course].detect { |c| params["#{c.name.underscore}_id"] }
@requestable = klass.find(params["#{klass.name.underscore}_id"])
end
私はプログラミングとレールの両方に慣れていないため、ヘルプやガイダンスは大歓迎です。私が何をしているのかほとんどわかりません。