Ruby on Rails - 在不同的类中创建数据库表

时间:2016-04-07 06:19:35

标签: ruby-on-rails ruby activerecord

所以我是RoR的新手,并且不确定我正在尝试做什么的正确方法。所以这就是我所拥有的:

class Artist < ActiveRecord:Base

  def self.search(search)
      Artist.create(:artist_name => x, artist_info => ... etc)

我为了简单而缩短了它,但你明白了。现在我有另一个名为“Album”的模型。我想在艺术家旁边创建一个Album数据库条目,但我只是将其创建为Albums.create(...),因为我不在Albums类中。是否可以在Artist中的search方法中调用Albums类中的函数?

类似的东西:

class Artist < ActiveRecord:Base

      def self.search(search)
          Artist.create(:artist_name => x, artist_info => ... etc)
          Albums.method(search)

Class Album < ActiveRecord:Base
      def self.method(search)
           etc

2 个答案:

答案 0 :(得分:1)

Rails执行此操作的方法是设置关系并使用它们创建关联记录:

class Artist
  has_many :albums
end

class Album
  belongs_to :artist
end

创建艺术家时,如果要创建两者:

Artist.transaction do
  artist = Artist.create!(
    artist_name: x,
    artist_info: y
  )

  album = artist.albums.create!(...)
end

您通常希望在事务中执行此操作,以避免在出现错误的情况下使用半成品记录混乱方法。

我不确定你为什么在这里使用method,这不是你应该用作名字的东西,它是由Ruby保留的。实际上并没有调用该方法,它只返回有关它的信息。

只要他们不是privateprotected,一个班级就无法在另一个班级上调用方法,这是没有理由的。有时它不是一个好主意,因为这是一个更好的方法。

答案 1 :(得分:0)

我实际上找到了答案。对于搜索相同问题的任何人,您可以通过&#34; class&#34; .method调用其他方法。所以在我的情况下,它将是Album.method(search)