【问题标题】:Listing records owned by the same model?列出同一模型拥有的记录?
【发布时间】:2012-04-25 14:03:49
【问题描述】:

我有一个简单的 Rails 3 应用程序,它有多个模型。我遇到问题的模型的简单概述是:

客户端模型

has_many :animals

动物模型

belongs_to :client

我能做的是显示同一客户拥有的其他动物的列表。

类似这样的:

<% @client.animals.each do |animal| %>
  <%= animal.AnimalName %>
<% end %>

因为这是在 Animal 控制器中,所以我的示例代码将不起作用。任何指针将不胜感激。

更新

澄清一下,如果我有以下记录:

Danny (Client)
Cat (animal owned by Danny)
Dog (animal owned by Danny)
Rabbit (animal owned by Danny)

然后我去了狗的记录的展示视图,我想要一个可以显示 Danny 拥有的所有动物的列表。例如

Cat
Dog
Rabbit

理想情况下不包括当前查看的动物(在本例中为狗)。

我尝试了以下方法,但似乎不起作用:

<% @client.animals.each do |client| %>
  <%= @client.animal.AnimalName %>
<% end %>

【问题讨论】:

  • 你说的其他动物是什么意思?除了什么? @client.animals 应该持有该客户拥有的所有动物。
  • @Mischa 我已经更新了我的问题。

标签: ruby-on-rails-3 model associations relation


【解决方案1】:

如果我理解正确,您拥有@animal 并想展示@animal 所有者拥有的所有动物。可以这样做:

<% @animal.client.animals.each do |animal| %>
  <%= animal.AnimalName %>
<% end %>

更新:

您可以在@animal.client.animals 上添加.where

@animal.client.animals.where('id != ?', @animal.id).each ...

在视图中这样做并不是一个好主意。所以我会在我的 Animal 模型中添加一个实例方法:

def other_animals_with_same_owner
  client.animals.where('id != ?', id)
end

你可以这样做:

@animal.other_animals_with_same_owner.each ...

【讨论】:

  • 啊,出于某种原因,我正在尝试反向“@client.animal”。是否有从列表中省略当前动物的标准方法?
猜你喜欢
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
相关资源
最近更新 更多