1

私は、他の 2 つのモデルと呼ばれるモデルを持っていevaluationますbelongs_to-studentgoal.

この関連付けをルーティング用に設定する方法を調査している間、最初はポリモーフィックな関連付けが最適であると考えていましたが、今ではよくわかりません。ポリモーフィックな関係についての私の理解はそれほどしっかりしていないので、間違っている場合は修正してevaluationsください。belong_to studentgoal

実際、与えられた aa のevaluation belong_to両方が同時に存在することが重要です。Railsのルーティング ガイドでは、リソースを 3 重にネストすることはお勧めできないと具体的に述べています。student goal

レールルーティングガイド

ただし、この警告でさえ、この例のように役に立ちません。一方、私の場合は両方同時に行う 必要がありphotos belong_to magazinesます。belong to publishersevaluationsbelong_tostudentsgoals

私は試した

resources :students, :goals do 
  resources :evaluations
end

students/evaluationsしかし、それはandのリソースを作成するだけですgoals/evaluations- だから私の質問、それから:

2 つの親モデルに均等に重み付けされたネストされたリソースにルーティングするにはどうすればよいですか (親モデルevaluationsの一方または両方のコンテキストでのみ表示されるため、作成、更新、および破棄アクションのみが必要です)。

また

ポリモーフィックな関連付けでこれを行う必要がありますが、正しく理解していませんか?

4

2 に答える 2

1

私はポリモーフィックを使用します:

ルート.rb

resources :students do
  resources :evaluations
end

resources :goals do
  resources :evaluations
end

models/evaluation.rb

class Evaluation < ActiveRecord::Base
  attr_accessible :some_attribute
  belongs_to :evaluable, polymorphic: true
end

models/student.rb

class Student < ActiveRecord::Base
  attr_accessible :some_attribute
  has_many :evaluations, as: :evaluable
end

モデル/goal.rb

class Goal < ActiveRecord::Base
  attr_accessible :some_attribute
  has_many :evaluations, as: :evaluable
end

目標と生徒の関係は次のようになります。

id    evaluable_id  evaluable_type    other_field
 1               4       'Goal'         'other goal content 1'
 2               1       'Student'      'other student content 1'
 3               1       'Student'      'other student content 2'

今、あなたは呼び出すことができます:

Student.find(1).evaluations

evaluable_type = Student where evaluable id = 1. または:

Goal.find(4).evaluations

ID 1 の評価が返されます。理由を推測してください。:) はい、ポリモーフィックな関連付けを使用します。

于 2013-08-07T12:46:25.263 に答える
0

rmagnum2002は、ポリモーフィック アソシエーションを使用したソリューションに関して非常に優れた回答を提供しましたが、私はそれを機能させることができませんでした。結局、私はevaluations所属goalsし続け、students二重にしました。ルーティングに関しては、私の関連部分はroutes.rb次のようになります。

resources :students, :goals, :only => :stub do
  resources :evaluations, :only => [:new, :create, :edit, :update, :destroy]
end  

そして以下を生成します:

student_evaluations POST   /students/:student_id/evaluations(.:format)                   evaluations#create
new_student_evaluation GET    /students/:student_id/evaluations/new(.:format)               evaluations#new
edit_student_evaluation GET    /students/:student_id/evaluations/:id/edit(.:format)          evaluations#edit
student_evaluation PUT    /students/:student_id/evaluations/:id(.:format)               evaluations#update
                       DELETE /students/:student_id/evaluations/:id(.:format)               evaluations#destroy
goal_evaluations POST   /goals/:goal_id/evaluations(.:format)                         evaluations#create
new_goal_evaluation GET    /goals/:goal_id/evaluations/new(.:format)                     evaluations#new
edit_goal_evaluation GET    /goals/:goal_id/evaluations/:id/edit(.:format)                evaluations#edit
goal_evaluation PUT    /goals/:goal_id/evaluations/:id(.:format)                     evaluations#update
                       DELETE /goals/:goal_id/evaluations/:id(.:format)                     evaluations#destroy

最も重要なことは、次のような評価モデルをデータベースに生成することです。

データベースビュー

したがって、それぞれevaluationに対応するgoal_id and student_idが同時にあります。

于 2013-08-15T16:22:52.857 に答える