Флажки выходят в привратника - PullRequest
0 голосов
/ 21 мая 2018

Я хочу разрешить пользователям выбирать области из списка флажков.Я настроил форму следующим образом:

  <%= f.label :scopes, class: 'col-sm-2 control-label' %>
    <% Doorkeeper.configuration.scopes.each do |scope| %>
      <%= check_box_tag("doorkeeper_application[scopes][#{scope}]", scope, @application.scopes.include?(scope)) %>
      <%= scope %><br>
    <% end %>
  <% end %>

, который выдает

image

doorkeeper_application[scopes], принимается Oauth::ApplicationsController.В то время как пользователи должны иметь возможность выбирать несколько областей, такие параметры, как doorkeeper_application[scopes][foo], не принимаются.

Как лучше всего передавать эти параметры в контроллер?Или есть лучшая практика для достижения областей с флажками в Doorkeeper?

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Как правило, я бы порекомендовал использовать помощники по формам для этой задачи, потому что таким образом rails может использовать свою магию, и вам не нужно иметь дело с именами полей ввода.

Я не знаком с Doorkeeper но я предполагаю, что области сохранены в таблице в вашей базе данных.В этом случае вы сможете определить отношение has_and_belongs_to_many :scopes для модели, к которой относится форма.

После этого вы можете сгенерировать checkbox_collection, как видно из ответа на на этот вопрос .

0 голосов
/ 25 марта 2019

Начиная с версии 5.1.0rc2, Doorkeeper поддерживает его из коробки, автоматически конвертируя массивы в строку области видимости, разделенную пробелами.См. https://github.com/doorkeeper-gem/doorkeeper/pull/1214 для получения более подробной информации.

Для версий выше 5.1.0rc2 вам необходимо исправить проблему с Scopes самостоятельно или предварительно обработать параметры ввода пользователя.

0 голосов
/ 21 мая 2018

В соответствии со спецификацией OAuth2 несколько областей должны быть объединены пробелами.Таким образом, вы должны получить имена проверенных областей из params, объединить их с пробелом " " и назначить это единственное значение в качестве значения doorkeeper_application[scopes].

...