【问题标题】:rails habtm relationrails habtm 关系
【发布时间】:2009-12-22 22:27:31
【问题描述】:

我有 2 个具有 has_and_belongs_to_many 关系的模型:

class Category < ActiveRecord::Base
  has_and_belongs_to_many :templates
end

class Template < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

我想知道如何通过这个关系得到一个类别名称,例如我找到了第一个模板:

t = Template.find(:first)

然后使用t.categories会返回一个对象,但我想有category.name作为回报,我该如何实现呢?

【问题讨论】:

  • 一个模板应该在您的域中包含一个类别还是多个类别?
  • 它可以有一个或多个类别

标签: ruby-on-rails has-and-belongs-to-many


【解决方案1】:

要获取与您的第一个 Template 实例关联的类别名称,您可以:

Template.first.categories.collect(&:name)

——这使用了 Rails 添加的Symbol#to_proc 支持。更多信息在this Railscast

【讨论】:

  • 我可以用这种方式为这些项目中的每一个创建一个链接吗?我怎样才能在每个项目之间放置一些空间?谢谢你的帮助:)
【解决方案2】:
t.categories.first.name

【讨论】:

  • 这只会让您获得与模板关联的第一个类别的名称。我相信 OP 想要所有类别的名称。
  • 但他说“我想要一个类别名称”而不是类别名称。我认为他可能不理解 habtm 的许多部分。
【解决方案3】:

假设一个类别记录有 name 字段你可以这样做:

t.categories.map(&:name)

【讨论】:

  • map 和 collect 方法有什么不同?
  • 它们是相同的,只是名称别名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2011-08-21
相关资源
最近更新 更多