Логическое переключение во вложенной форме
-
21-12-2019 - |
Вопрос
У меня есть Issues
Контроллер и вложенный Comments
Контроллер.Мой Форма для комментариев находится в моем Проблемы Показывают Вид.
Я пытаюсь добавить флажок при комментировании, который переключал бы :closed => boolean
атрибут на моем Issue
.
<%= form_for @issue.comments.build, url: script_issue_comments_path(@script, @issue) do |f| %>
<!-- Form , etc-->
<%= form_for [@script, @issue] do |f| %>
<%= f.check_box :closed %> Mark as Closed
<% end %>
<% end %>
Очевидно, что это не сработало.Как можно этого добиться ?
В принципе, я поставлю флажок прямо рядом с кнопкой отправки Комментария..Таким образом, если этот параметр выбран, атрибут Проблемы :closed
будет установлено значение True
Решение
Внутренняя форма, которая у вас есть, не является вложенной формой (в терминах rails), и, как вы обнаружили, не будет вести себя так, как вы хотите, потому что на самом деле она не привязана к отправке внешней формы.
Один из подходов, который вы могли бы сделать, который позволил бы контроллеру комментариев одновременно не нести ответственность за редактирование проблем (что, на мой взгляд, было бы беспорядочно), заключался бы в том, чтобы иметь что-то вроде comment_closes_issue
атрибут в комментарии.Затем, когда вы сохраните комментарий, если comment_closes_issue
имеет значение true, затем обновите родительскую проблему...Это все еще немного стирает границы между двумя моделями, но если они тесно связаны, то, возможно, в вашем приложении это нормально.
Редактировать - вот пример того, как с этим справиться, предполагая, что Комментарий относится к проблеме:
class Comment < ActiveRecord::Base
belongs_to :issue
after_save :close_parent_issue, if: :comment_closes_issue
private
def close_parent_issue
issue.update_attributes closed: true
end
end
Тогда, на ваш взгляд, вы можете просто иметь <%= f.checkbox :comment_closes_issue %>...