Ruby on rails Rails_admin,如何为自定义操作创建表单?

Ruby on rails Rails_admin,如何为自定义操作创建表单?,ruby-on-rails,ruby,model-view-controller,rails-admin,Ruby On Rails,Ruby,Model View Controller,Rails Admin,我已经生成了我的自定义操作。我创建了一个类,该类继承自RailsAdmin::Config::Actions::Base 我已在rails\u admin\u my\u action/app/views/rails\u admin/main/my\u action.html.erb中创建了此操作的视图 当我们为您的控制器创建表单时,我们主要使用form\u for,它将转到我的控制器并执行特定的操作,但我认为在rails\u admin中还有其他内容,因为rails\u admin使用他自己的控

我已经生成了我的自定义操作。我创建了一个类,该类继承自
RailsAdmin::Config::Actions::Base

我已在
rails\u admin\u my\u action/app/views/rails\u admin/main/my\u action.html.erb中创建了此操作的视图

当我们为您的控制器创建表单时,我们主要使用
form\u for
,它将转到我的控制器并执行特定的操作,但我认为在
rails\u admin
中还有其他内容,因为rails\u admin使用他自己的控制器,该控制器是从
RailsAdmin::Config::Actions::Base
生成的

如何为自定义rails\u管理操作创建表单

我问这个问题是因为没有关于这方面的适当文件

我对我的行动的看法如下:

<h3>Manage state of <%= @object.name %></h3>
rails_admin/ └── config/ └── actions/ │ └── cancel.rb └── sections/ └── cancel.rb
require "rails_admin/config/actions/cancel"
require "rails_admin/config/sections/cancel"
require "monkey/rails_admin/config/model"

RailsAdmin.config do |config|
  config.actions do
    # ...
    cancel
  end

  config.model "ModelName" do
    cancel do
      field :name
    end
  end
end
管理的状态



lib/my\u action.rb
中,我刚刚复制了
edit
action的
register\u instance\u选项:controller


当我提交表格时。我得到了
ActiveModel::ForbiddenAttributeError
错误。

这取决于您的操作,所以模板是如何实现的。基本上,
form\u标记my\u action\u path
或@object的
form\u,url:my\u action\u path(@abstract\u model,@object.id)
应该可以工作。仅供参考,您可以在rails\u管理配置中:

RailsAdmin.config do |config|
  config.actions do
    member :my_action do
      only ['MyModel']
      http_methods { [:post, :get] }

      controller do
        proc do
          if request.get?
          elsif request.post?
          end
        end
      end

    end
  end
end

您可以使用Rails管理员的控制器,而不是实现您自己的控制器,例如,如果您只需要为自定义操作自定义表单,而不涉及其他逻辑

为此,在添加实际操作后,还需要添加一个节,方法相同,但继承自
RailsAdmin::Config::Sections::Base

因此,如果您的自定义操作在lib目录中被称为“Cancel”,您可能会遇到如下情况:

<h3>Manage state of <%= @object.name %></h3>
rails_admin/ └── config/ └── actions/ │ └── cancel.rb └── sections/ └── cancel.rb
require "rails_admin/config/actions/cancel"
require "rails_admin/config/sections/cancel"
require "monkey/rails_admin/config/model"

RailsAdmin.config do |config|
  config.actions do
    # ...
    cancel
  end

  config.model "ModelName" do
    cancel do
      field :name
    end
  end
end

现在让我们看看<代码> ReaSADMI::CONFIG::Studio,它实现了<代码>包含的方法,这是为什么现在什么都不能工作的原因)p> 此模块包含在

RailsAdmin::Config::Model
中,并定义用于在配置中定义节的配置方法:
列表
编辑
更新
,等等。自定义节不起作用,因为加载新节之前执行了

为了解决这个问题,我为
RailsAdmin::Config::Model
添加了一个补丁,在加载了所有自定义部分后,该补丁再次重新执行该方法。下面是代码(不是最好的方法,但我太懒了):

更好的选择是实现
.register
方法,如
RailsAdmin::Config::Actions
不重新定义现有方法

然后您的
rails\u admin.rb
将如下所示:

<h3>Manage state of <%= @object.name %></h3>
rails_admin/ └── config/ └── actions/ │ └── cancel.rb └── sections/ └── cancel.rb
require "rails_admin/config/actions/cancel"
require "rails_admin/config/sections/cancel"
require "monkey/rails_admin/config/model"

RailsAdmin.config do |config|
  config.actions do
    # ...
    cancel
  end

  config.model "ModelName" do
    cancel do
      field :name
    end
  end
end
就是这样,现在在您的
cancel.haml
中,您可以添加(从默认编辑模板复制):

这里唯一的区别是动作名,传递给
#generate
。Rails管理员将为您生成表单,并将其提交给自己的“主”控制器。如果您需要向操作添加一些自定义逻辑,那么您可以在操作中实现控制器进程,它将被调用


玩得开心

我已经按照你说的那样创造了。但是,当我将表单提交给我的控制器时,我没有收到任何路由匹配错误。执行
rake routes
,找到
RailsAdmin::Engine
的操作,并使用
“{your\u action\u name}\u path”
帮助您需要定义
http\u方法
选项。默认情况下,它是
:仅获取
。看看可能的选择:效果很好。现在,当我提交表单时,会出现
禁止属性错误
。在哪里允许我的属性?发布您是如何定义自定义操作的,在哪里定义自定义操作的,以及
my_action.html.erb