Понимание функции модели Rails

У меня есть модель - Встреча. В схеме базы данных - собрание имеет задачи. (У задачи также есть модель) Когда я сохраняю встречу, существует метод, который автоматически вызывается в модели Meeting. Это написано так:

def task_attributes = (task_attributes)

Как это называется? Я проверил. Этот метод не записывается нигде в коде.

1
это рубиновая черная магия и, вероятно, связано с хорошим метапрограммированием, и она проходит под капотом.
добавлено автор Kleber S., источник
Сохранить время разработчиков?
добавлено автор Kleber S., источник
ОК. В чем смысл этой магической функции?
добавлено автор Noam B., источник

2 ответы

Поскольку вы используете ассоциацию has_many , ActiveRecord хранит детские модели, в ваших задачах. Это происходит, если вы устанавливаете : autosave в true или нет, если вы создаете новые задачи. ruby генерирует весь код динамически за кулисами, поэтому вы его не находите.

Пример один-на-один

Когда: автосохранение не объявлено, новые дети сохраняются при сохранении их родителя:

class Meeting
  has_many :comments # :autosave option is not declared
end

meeting = Meeting.new(title: 'staff')
meeting.tasks.build(name: 'boring stuff')
meeting.save # => saves both meeting and task

meeting = Meeting.create(title: 'staff')
meeting.tasks.build(name: 'boring stuff')
meeting.save # => saves both meeting and task

meeting = Meeting.create(title: 'staff')
meeting.tasks.create(name: 'boring stuff')
meeting.save # => saves both meeting and task

Когда: autosave истинно, все дети сохраняются независимо от того, являются ли они новыми записями или нет:

class Meeting
  has_many :tasks , autosave: true
end

meeting = Meeting.create(title: 'staff')
meeting.tasks.create(name: 'boring stuff')
meeting.tasks[0].priority = 1
meeting.save # => saves both meeting and task, with 1 as priority
0
добавлено

If a meeting has_one :task and you have accepts_nested_attributes_for :task, that means that calls to fields_for :task will generate params that follow the format _attributes which may be the reason why you can't find it anywhere in the code.

0
добавлено
в этом случае, как сказал Клебер, это должно быть метапрограммирование.
добавлено автор jvnill, источник
Нет. У встречи много задач, и в коде вообще нет accept_nested_attributes_for ...
добавлено автор Noam B., источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff