Поскольку у вас есть общее условие where
, вы можете использовать includes
. Это сгенерирует запрос LEFT OUTER JOIN
:
Action.includes(:actions_users).where(actions_users: { user_id: true })
Или, если вы используете Rails 5+
, Active Record предоставляет метод поиска left_outer_joins
:
Action.left_outer_joins(:actions_users).where(actions_users: { user_id: true })
Как вы обнаружили, черепаха Screen
является луком многих слоев. Есть две проблемы, которые нам нужно решить: класс _Screen
вызывает его инициализатор super (TurtleScreen's) таким образом, который не подходит для подкласса; функция Screen()
вызывается из множества мест и жестко определяет, какой класс создает экран. Итак, давайте рассмотрим обе проблемы:
import turtle
class MyScreen(turtle._Screen):
def __init__(self):
super().__init__()
turtle.TurtleScreen.__init__(self, MyScreen._canvas)
self.setup(500, 500)
self.screensize(1000, 1000)
self.title("Title")
self.bgcolor("black")
def MyScreenFunction():
if turtle.Turtle._screen is None:
turtle.Turtle._screen = MyScreen()
return turtle.Turtle._screen
turtle.Screen = MyScreenFunction
class MyTurtle(turtle.Turtle):
def __init__(self):
super().__init__(shape="circle")
wn = turtle.Screen()
tortoise = MyTurtle()
tortoise.color('white')
tortoise.circle(100)
wn.mainloop()
Однако, может быть, есть лучший путь. Черепаха может использоваться как в автономном режиме , как описано выше, так и в , встроенном в программу tkinter. встроенный подход использует RawTurtle
, TurtleScreen
и, необязательно, Scrolled Canvas
. Эти классы легче подклассить, и лучшим подходом может быть создание собственного эквивалента автономной черепахи путем внедрения черепах в tkinter и создания подклассов по мере необходимости.