如何为collection_action / controller添加自定义表单?

时间:2014-05-08 20:59:33

标签: activeadmin

我有以下内容:

collection_action :new, :method => :post do
  begin
    user = User.find_by_email(params[:email])
    if user
      UserPermission.create(:user_id => user.id,
      :permission => UserPermission::SUPPORT,
      :creator => current_user)
    end
    rescue ActiveRecord::RecordNotFound
      flash[:warn] = 'User not found'
  end
  redirect_to admin_support_users_path, notice: 'Support user added.'
end

form do |f|
  f.inputs do
    f.input :email
  end
end

action_item only: [:index], :method => :post do
  link_to 'Add Support User', new_admin_support_user_path
end

上述工作意味着不会抛出任何错误。支持用户页面加载,我可以单击添加支持用户按钮。但是,'支持用户已添加。'立即显示。 “添加支持用户”按钮不会将我带到表单以输入电子邮件。如何添加/创建/使用将电子邮件参数传递给我的collection_action的表单?

我是activeadmin的新手,文档很少,所以任何帮助都表示赞赏。感谢。

2 个答案:

答案 0 :(得分:0)

您只需要添加另一个操作 - 就像普通资源需要为create和new分别执行操作一样。你新的'动作可以内联或单独部分呈现自定义表单,如下所示:

http://www.activeadmin.info/docs/5-forms.html

那就是说,我不确定我理解你为什么需要自定义动作。这是在您的用户资源文件中的活动管理员?如果是这样,您可以使用默认的新用户操作,并将表单中的当前用户包含为隐藏变量作为创建者。如果这不在您的用户资源活动管理文件中,那么您可能需要一个。

答案 1 :(得分:0)

想出来。我会按照我的理解尝试解释。我最初的问题可能不清楚。我之所以添加“支持”用户,是因为我已经添加了“支持”用户。'消息是因为我正在更新错误的方法。上面的方法应该是:create controller方法,而不是:new controller方法。 :new使用HTTP GET,这就是它直接进入重定向的原因。 :create接受HTTP POST。所以,相反,我有以下内容:

def create
  begin
    user = User.find_by_email(params[:email])
    if user
      UserPermission.create(:user_id => user.id,
      :permission => UserPermission::SUPPORT,
      :creator => current_user)
    end
  rescue ActiveRecord::RecordNotFound
    flash[:warn] = 'User not found'
  end
  redirect_to admin_support_users_path, notice: 'Support user added.'
end

def new 
  render 'new.html.arb', :layout => 'active_admin'
end

这正确地创建了一个漂亮的主动管理表单,接受电子邮件参数。