0

我们有 3 个模型模型 1、模型 2、模型 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 回答