在用户选择框中使用Devise Current User作为默认用户



我正在使用Devise和Active Admin,到目前为止,他们在一起玩得很好。我没有使用默认的Active Admin"AdminUser",而是使用我自己的"User"模型,有时在我的应用程序中被称为"Author"。

我正在创建一个文章表单(创建/更新),并且我有一个用户选择框,如果记录是更新,则该框是预先选择的,但如果是新记录则不会。我想做的是,如果我正在创建一个新记录,请使用Devise"current_user"。由于ActiveAdmin使用Formtastic,我发现:https://github.com/justinfrench/formtastic/wiki/Deprecation-of-%3Aselected-选项,这基本上解释了这可能是一个即将推出的功能,但这可能最好通过前置过滤器来实现,这就是我现在遇到的问题。

这是我的表单视图:

<%= 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 %>

我可以使用jQuery预先选择current_user,类似于以下内容:

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

但这会覆盖"编辑"视图中的选定用户,在该视图中已分配了作者/用户。。。而且它看起来也不像Rails方式。。。

编辑:我发现:活动管理员:只自定义新表单

因此,在我看来,基于此,我确定文章是否是新记录,如果是,我会包装javascript,以便将其放在新文章的页面上。这样,在文章更新时,用户仍然处于选中状态。

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

同样,我不认为这是最优雅的解决方案,所以如果有人对更好的方法有任何意见(我相信有),请告诉我!

在控制器中使用before_filter。。。

controller do
  before_filter :assign_user, :only => :new
  private
  def assign_user
    resource.user = current_user
  end
end

这样,当您的表单被呈现时,@article将已经通过对resource方法的调用填充了用户id(在您的情况下,它引用@article)。

最新更新