我怎样才能重写 ActiveRecord 查询来解决这个问题?我是一名 Python 程序员并使用 sqlalchemy,所以如果可以从 Python 的角度解释这一点,那就太好了。我真的只需要知道如何解决这个问题。
我知道这个问题可能与在每台服务器上打开的连接有关,因此与单服务器登台环境相比,在生产环境中运行速度较慢。但我不知道如何解决这个问题。我习惯用 python 编程,在那里我使用 sqlalchemy,它已经针对这种分布式系统进行了优化。
class Board < ActiveRecord::Base
def messages
message_ids = Message.where("board_id = ?", self.id).map { |c| c.id }
message_ids.map { |message_id| Message.find_by_id(message_id) }
end
end
ActiveRecord 查询经过优化,可在多服务器生产环境和单服务器登台环境中运行。
应用程序/模型/board.rb
class Board < ActiveRecord::Base
has_many :messages
end
以上将允许您执行以下操作:
board = Board.first
board.messages
# => returns a `ActiveRecord::Associations::CollectionProxy` object
# for beginners, simply treat `ActiveRecord::Associations::CollectionProxy` as
# if that's an Array object. So you can still do something like
board.messages.first
# => #<Message id: 123, ...>
应用程序/模型/message.rb
class Message < ActiveRecord::Base
belongs_to :board
end
...这将允许您执行以下操作:
message = Message.first
message.board
# => #<Board id: 456, ...>
尤其要注意“隐含约定”,例如隐含foreign_key
和class_name
值
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句