模型关联

时间:2010-04-14 17:49:00

标签: ruby-on-rails associations models

我有两个模型Library和Book。在我的库模型中,我有一个数组 - book_ids。 Book模型的主键是ID。

如何在我的库模型中创建has_many:books关系?

这是我们使用rails的遗留数据库。

感谢。

3 个答案:

答案 0 :(得分:1)

您的数据库架构并不真正符合规定的Rails约定,因此您可能很难使默认的has_many关联工作。您是否尝试过使用自定义SQL选项?

如果你无法让内置的has_many关联起作用,那么你必须自己动手。我将在您的库模型上定义booksbooks=方法,并在其中设置一个虚拟属性,然后将其作为数组保存在数据库中。也许是这样的:

class Book > ActiveRecord::Base; end

class Library > ActiveRecord::Base

  before_save :serialize_books

  def books
    @books || nil
  end

  def books=(new_books)
    @books = new_books
  end

  private
  def serialize_books
    @attributes['books'] = "[" + @books.collect {|b| b.id }.join(',') + "]"
  end
end

那样就不会提取数据如果你想更多地支持单一查询查找操作,你可以在范围中使用一些自定义SQL或覆盖查找并将其添加到默认选项中。如果您需要任何帮助,请发表评论!

答案 1 :(得分:0)

如果你想使用has_many,你可以使用选项:counter_sql和:finder_sql使用MySQL LIKE或REGEX语法。但最好首先加载Libary模型,然后解析book_ids列并加载书籍,或直接使用该字符串构建查询。

答案 2 :(得分:0)

考虑使用:使用ActiveRecord的序列化方法:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002284

它可能会做你想要的事情