Вопрос

У меня есть 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 %>...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top