我使用的是Devise和Active Admin,到目前为止,我们一起玩得很好。我没有使用默认的Active Admin" AdminUser',而是使用我自己的用户'模型,有时被称为'作者'在我的应用程序中。
我正在创建文章表单(创建/更新),如果记录是更新,我有一个预先选择的用户选择框,但如果是< em>新记录。我想要做的是如果我正在创建一个新记录,请使用Devise&#39; &#39; CURRENT_USER&#39 ;.由于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 %>
我可以使用jQuery预先选择 current_user ,如下所示:
<script type="text/javascript">
$(document).ready(function() {
$('#article_user_id').val(<%= current_user.id %>);
});
</script>
但是这会覆盖&#39;编辑&#39;中的所选用户。视图,其中已经分配了作者/用户......并且它似乎也不像Rails方式...
修改 我找到了这个: Active Admin: Customize only new form
基于此,在我看来,我确定文章是否是新记录,如果是,我将包装javascript,以便将其放在新文章的页面上。这样,在文章更新时,用户仍处于选中状态。
<% if controller.action_name == 'new' %>
<script type="text/javascript">
$(document).ready(function() {
$('#article_user_id').val(<%= current_user.id %>);
});
</script>
<% end %>
同样,我不认为这是最优雅的解决方案,所以如果有人对更好的方式有任何意见(我确定有),请告诉我!
答案 0 :(得分:3)
在控制器中使用before_filter ...
controller do
before_filter :assign_user, :only => :new
private
def assign_user
resource.user = current_user
end
end
这样,当你的表单被渲染时,@ article会通过调用资源方法(在你的情况下引用@article)填充用户id。