Использование Devise Current User в качестве пользователя по умолчанию в поле User Select - PullRequest
2 голосов
/ 20 марта 2012

Я использую Devise и Active Admin, и до сих пор играли вместе.Вместо того, чтобы использовать Active Admin по умолчанию «AdminUser», я использую свою собственную модель «User», которую в моем приложении иногда называют «Автор».

Я создаю форму Статьи (Создать /Обновить), и у меня есть поле выбора пользователя, которое предварительно выбрано, если запись является обновлением , но не, если это новая запись . Что я хочу сделать, это если яя создаю новую запись , использую Devise 'current_user'. Так как ActiveAdmin использует Formtastic, я нашел это: https://github.com/justinfrench/formtastic/wiki/Deprecation-of-%3Aselected-option,, который в основном объясняет, что это может быть функция, но это можетлучше всего добиться с фильтром до, вот где я в тупике.

Вот мой вид формы:

<%= semantic_form_for [:admin, @article] do |f| %>
    <%= f.inputs "Details" do %> 
        <%= f.input :title %>
        <%=
            f.input :user, :as => :select, :label => 'Author',
            :collection => User.all, :include_blank => false,
            :required => true 
        %>

        <%=
            f.input :categories, :as => :check_boxes, :label => 'Categories',
            :collection => Category.all, :include_blank => 'None',
            :hint => 'Choose all categories that apply.',
            :required => false 
        %>

        <%= f.input :desc, :label => 'Description' %>
        <%= f.input :content, :label => 'Content' %>
    <% end %>
    <%= f.buttons %>
<% end %>

Я могу предварительно выбрать current_user используя jQuery, что-то вроде этого:

<script type="text/javascript">
  $(document).ready(function() {
    $('#article_user_id').val(<%= current_user.id %>);
  });
</script>

, но это переопределяет выбранного пользователя в представлении «Редактировать», в котором автор / пользователь уже назначен ... и это также не похоже наRails way ...

Редактировать: Я нашел это: Активный администратор: настраивайте только новую форму

Итак, исходя из этого, на мой взгляд, я определяю, является ли статья новой записью или нет, и если это так, я оборачиваю javascript так, чтобы она получалаположить на страницу для новых статей.Таким образом, при обновлении статьи пользователь все еще выбирается.

<% if controller.action_name == 'new' %>
  <script type="text/javascript">
  $(document).ready(function() {
    $('#article_user_id').val(<%= current_user.id %>);
  });
  </script>
<% end %>

Опять же, я не думаю, что это самое элегантное решение, поэтому, если у кого-то есть какие-либо комментарии по поводу лучшего способа (который я 'я уверен, что есть), пожалуйста, дайте мне знать!

1 Ответ

3 голосов
/ 11 апреля 2012

Используйте before_filter в вашем контроллере ...

controller do
  before_filter :assign_user, :only => :new

  private

  def assign_user
    resource.user = current_user
  end
end

Таким образом, когда ваша форма визуализируется, у @article уже будет заполнен идентификатор пользователя посредством вызова метода ресурса (который ссылается на @статья в вашем случае).

...