#methods #activerecord #associations
Вопрос:
Поэтому я немного попрактиковался в кодировании, где наткнулся на запрошенный результат для приложения, в котором метод может запустить актера через класс Movie. Технически это займет actor
(экземпляр Actor
класса) и удалит их роль из этого фильма, удалив строку из класса «роли». (Надеюсь, я правильно объяснил это)
Я действительно попробовал кое-что, и это сработало, однако я не понимаю, почему это сработало, и мне нужно какое-то объяснение, чтобы понять это. Это выглядит примерно так:
class Movie < ActiveRecord::Base
has_many :roles
has_many :actors, through: :roles
def fire_actor(actor)
self.actors.destroy(actor.id)
end
end
Когда я попробовал это несколькими разными способами, это единственный, который сработал для меня. Я думал, что если сделать это так, то это приведет к удалению актера из таблицы «актеры». Однако он сделал то, что хотел результат, и просто удалил его из таблицы «роли», которая была связана с идентификатором actor_id.
В какой-то момент я нашел и другой способ заставить этот метод работать:
def fire_actor(actor)
self.roles.find { |role| role.actor_id == actor.id }.destroy
end
Я лично могу легче прочитать это и понять, как это работает.
Итак, это подводит меня к этим последним вопросам:
- Как сработал первый метод?
- Является ли второй метод, над которым я работал, предпочтительнее первого из-за простой удобочитаемости, или есть какие-то другие факторы?
Я просто хочу более глубоко понять, что здесь произошло, чтобы убедиться, что я хорошо знаю концепции.
Мы будем признательны за любую помощь и разъяснения. Спасибо!