获取ActiveRecord :: Relation的父级

时间:2012-02-24 16:21:01

标签: ruby-on-rails ruby-on-rails-3

我有部分已通过关联。我想得到通过我关联的对象。我该怎么做呢?我觉得这很容易,但我似乎找不到方法。

以下是我传递给部分内容的内容:

    <%= render :partial => 'shared/records_table', :locals => {:parent => @location, :records => @location.people} %>

以下是我想传递给部分内容的内容:

    <%= render :partial => 'shared/records_table', :locals => {:records => @location.people} %>

还有这样的例子:

    <%= render :partial => 'shared/records_table', :locals => {:parent => @time, :records => @time.families} %>

    <%= render :partial => 'shared/records_table', :locals => {:parent => @car, :records => @car.families} %>

我不知道协会的类别或父母。

3 个答案:

答案 0 :(得分:0)

不确定为什么你反对将这些信息传递给部分信息,但如果地点有很多人和某人属于某个地点,那么你可以带走那个部分和呼叫地点的任何人来获取父信息

编辑:在模型上添加parent方法,返回相应的关联。例如,person.parent将返回Location个对象。

严重的是,将父级传递给部分内容没有任何问题。

答案 1 :(得分:0)

我想在你的位置类中你有类似has_many :people的东西,而你的Person类有belongs_to :location之类的东西。那么为什么不将#parent别名为每个类的父级。您的Person类看起来像:

belongs_to :location
alias_method :parent, :location

这样你的所有记录都会回复父母,你不需要将它传递给部分。您需要在家庭班中做类似的事情。

需要注意的是,在partial中调用parent将从数据库为每条记录加载父级。渲染局部时,你需要做这样的事情来避免这种情况:

render :partial => 'shared/records_table', :locals => {:records => @location.people.includes(:location)}

答案 2 :(得分:0)

遇到类似的情况,以下方法起作用。 ActiveRecord::Association有一种返回所有者的方法。

@foo.bars.proxy_association.owner => @foo