【问题标题】:Confused on setting up a has_many relationship对建立 has_many 关系感到困惑
【发布时间】:2011-02-11 02:34:29
【问题描述】:

我已经玩了几个小时来建立不同的关系,但我不知道如何用我正在使用的东西建立 has_many 关系。不确定是命名冲突还是我不理解。

这是我的数据库表:

show_names (table name):
id
show_id
name

shows (table name):
id
length
synopsis
number_of_episodes
status

所以每个节目都有很多可能的名字。所以我想建立一个 has_many 关系,这样我就可以调用类似的东西:

Show.all.shownames[0].name

那会给我名字。

这是我的模型的代码示例,我认为这是我搞砸的地方。

class ShowName < ActiveRecord::Base
  has_many :shows
end

class Show < ActiveRecord::Base
  belongs_to :shownames
end

使用 ShowName.all 可以获取数据,Show.all 也可以。

所以我对此有两个主要问题。

1) 我是不是把某些东西命名错了或放错了地方? 2) 我如何访问节目名称?我知道在其他使用 has_one 时我只使用实体的名称它是否与 has_many 一样工作

感谢任何帮助。

【问题讨论】:

  • 为什么需要将节目名称与节目分开?我的意思是,每个节目都有名字吗?还是为了赶上多季节目?
  • 请注意 Show.all.shownames[0].name 在您的设置中没有意义。 Show.all 返回一个数组,其中 shownames 不会是一个方法。
  • @corroded 每个节目都会有 1 个或多个名称。不仅仅是它的官方名称,还有流行文化的名称。
  • @Austin 那是我打字有点快我的意思是输入 Show.all[0].show_names[0] 类似的东西。

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


【解决方案1】:

您翻转了 belongs_to 和 has_many 并需要一个额外的下划线。试试这个:

class ShowName < ActiveRecord::Base
  belongs_to :show
end

class Show < ActiveRecord::Base
  has_many :show_names
end

现在……

show = Show.first
show.show_names  =>  ["First name for first show", "Second name for second show"]

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2015-11-29
    • 2015-05-09
    • 2019-11-19
    • 2017-10-10
    相关资源
    最近更新 更多