0

model1、model2、model3 の 3 つのモデルがあります。この3つは接続されています

class Model1 < ActiveRecord::Base
  has_many :model2s
end
class Model2 < ActiveRecord::Base
  belongs_to :model1s
  has_many :model3s
end
class Model3 < ActiveRecord::Base
  belongs_to :model2s
end

Model1 のテーブルには id が存在します。

Model2 のテーブルには、id と model1_id が存在します。

Model3 のテーブルには id と model2_id が存在します。

今、Model3Controller から table1 と table2 からデータを取得したいと考えています。これはうまくいきます。

class Model3Controller < ApplicationController
  def create
    @model2controller = Model2.find(params[:model3controller][:model2_id])
    @model1controller = ?
  end
end

model1controller の table1 から関連付けられたデータセットからデータを取得するにはどうすればよいでしょうか? model1_id を table3 に追加する必要がありましたか、それとも別の方法で呼び出すことができますか。この疑似コードのように

@model1controller = Model1.find(
params[:model3controller][:model2_id]params[:model2controller][:model1_id])
4

1 に答える 1

1

何か不足している可能性がありますが、次のことだけを行う必要があるようです。

model1 = Model3.find_by_id(params[:model3_id]).model2.model1

編集します。上記のコードは、次の行と同じように機能します。

model3 = Model3.find_by_id(params[:model3_id]) # instantiate a model3

model2 = model3.model2 # from mode3 grab a model2
                       # this is possible due to the fact that model3 is associated with model2 via the belongs_to relation

model1 = model2.model1 # model2 "belongs_to" model1, i.e. we can grab model1 by asking model2: "whom do belong to?" just like in the previous example

インスタンスのメソッドへのアクセスは小文字で行われることに注意してください。

object.method # => something is returned

あなたの例では、間違いを犯していますModel3.find_by_id(params[:id]).Model2( の大文字に注意してくださいModel2。これは間違っています)

また、params[:id] が実際にコントローラー アクションに渡されているかどうかを確認します。それ以外の場合、存在しない場合Model3.find_by_id(params[:id])は戻りnil、前述のエラーが発生します。

于 2012-05-11T19:52:28.640 に答える