我有两个模型Library和Book。在我的库模型中,我有一个数组 - book_ids。 Book模型的主键是ID。
如何在我的库模型中创建has_many:books关系?
这是我们使用rails的遗留数据库。
感谢。
答案 0 :(得分:1)
您的数据库架构并不真正符合规定的Rails约定,因此您可能很难使默认的has_many关联工作。您是否尝试过使用自定义SQL选项?
如果你无法让内置的has_many
关联起作用,那么你必须自己动手。我将在您的库模型上定义books
和books=
方法,并在其中设置一个虚拟属性,然后将其作为数组保存在数据库中。也许是这样的:
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
它可能会做你想要的事情