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