Rails 3一对多关系问题 - 如何返回列名值

时间:2011-07-13 03:15:28

标签: ruby-on-rails-3

我与2个表有一个一对一的关系如下:

型号:

class MediaType < ActiveRecord::Base 
  belongs_to :media
end

class Media < ActiveRecord::Base
  has_many :media_types
end

为简单起见,SQL是:

create_table :media do |t|
  t.string "name", :limit => 255
  t.integer "media_type_id"
end

create_table :media_types do |t|
  t.string "name", :limit => 255
end

插入与media_type_id相关的媒体记录后,如何撤回与媒体记录相关的media_type.name值?

我一味地试过:

media = Media.find(1)
media.media_type_id.name

但那当然没有用。我的SQL可能不是Rails标准吗?

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果您认为:media_type有多个媒体,但每个媒体只有一个media_type

您需要其他型号:

class MediaType < ActiveRecord::Base 
  has_many :medias
end

class Media < ActiveRecord::Base
  belongs_to :media_type
end

并且

media = Media.find(1)
media.media_type.name 

给你起名字

答案 1 :(得分:0)

似乎媒体has_many media_types。

在这种情况下,您可以在media_id表中创建media_types列,但是您可以通过其他方式进行操作。

然后,您将通过

处理每个关系
types = Media.media_types

获取媒体所拥有的media_types,以及

media = MediaType.media 

获取mediatype所属的媒体。