Ruby on rails 为自定义操作定义控制器似乎不起作用

Ruby on rails 为自定义操作定义控制器似乎不起作用,ruby-on-rails,rails-admin,Ruby On Rails,Rails Admin,大家好, 我已经在我的项目中实现了rails管理,现在有两件事我目前还没有解决 我希望在rails管理员中我的用户控制器的列表视图中有一个链接(标记为Publisher)作为ajax链接,这是在rails中使用remote=>true完成的,然后在rails中为其编写相关联的jscode和html代码 对于上面的自定义操作“将\u标记为\u publisher”,我定义了如下配置设置 require "rails_admin_mark_as_publisher/engine" module R

大家好,

我已经在我的项目中实现了rails管理,现在有两件事我目前还没有解决

  • 我希望在rails管理员中我的用户控制器的列表视图中有一个链接(标记为Publisher)作为ajax链接,这是在rails中使用remote=>true完成的,然后在rails中为其编写相关联的jscode和html代码

  • 对于上面的自定义操作“将\u标记为\u publisher”,我定义了如下配置设置

    require "rails_admin_mark_as_publisher/engine"
    
    module RailsAdminMarkAsPublisher
    end
    
    require 'rails_admin/config/actions'
    
    module RailsAdmin
      module Config
        module Actions
          class MarkAsPublihser < Base
            RailsAdmin::Config::Actions.register(self)
    
            register_instance_option :collection do
              true
            end
    
            register_instance_option :http_methods do
              [:get,:post]
            end
    
            register_instance_option :route_fragment do
              'mark_as_publisher'
            end 
    
            register_instance_option :controller do
              Proc.new do
                binding.pry
                if request.get?
                  respond_to do |format|
                    format.html { render @action.template_name} 
                  end
                elsif request.post?
                  redirect_path = nil
                  if @object.update_attributes(:manager => true)
                    flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.mark_as_publisher.done"))
                    redirect_path = index_path
                  else
                    flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.mark_as_publisher.done"))
                    redirect_path = back_or_index
                  end
                end  
              end
            end  
          end
        end
      end
    end
    
    <%=  rails_admin_form_for @object, :url => mark_as_publisher_path(:model_name => @abstract_model.to_param, :id => @object.id), :as => @abstract_model.param_key,:method => :post ,:html => { :class => "form-horizontal denser", :data => { :title => "Mark" } } do |form| %>
      <%= form.submit "save" %>
    <%end%>
    
    内部config/rails\u admin.rb

     config.actions do 
    
            # root actions
          dashboard                     # mandatory
          # collection actions 
          index                         # mandatory
          new
          export
          history_index
          bulk_delete
          # member actions
          show
          edit
          delete
          history_show
          show_in_app
          member :mark_as_publisher
     end
    
    现在,自定义操作的定义如下所示

    require "rails_admin_mark_as_publisher/engine"
    
    module RailsAdminMarkAsPublisher
    end
    
    require 'rails_admin/config/actions'
    
    module RailsAdmin
      module Config
        module Actions
          class MarkAsPublihser < Base
            RailsAdmin::Config::Actions.register(self)
    
            register_instance_option :collection do
              true
            end
    
            register_instance_option :http_methods do
              [:get,:post]
            end
    
            register_instance_option :route_fragment do
              'mark_as_publisher'
            end 
    
            register_instance_option :controller do
              Proc.new do
                binding.pry
                if request.get?
                  respond_to do |format|
                    format.html { render @action.template_name} 
                  end
                elsif request.post?
                  redirect_path = nil
                  if @object.update_attributes(:manager => true)
                    flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.mark_as_publisher.done"))
                    redirect_path = index_path
                  else
                    flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.mark_as_publisher.done"))
                    redirect_path = back_or_index
                  end
                end  
              end
            end  
          end
        end
      end
    end
    
    <%=  rails_admin_form_for @object, :url => mark_as_publisher_path(:model_name => @abstract_model.to_param, :id => @object.id), :as => @abstract_model.param_key,:method => :post ,:html => { :class => "form-horizontal denser", :data => { :title => "Mark" } } do |form| %>
      <%= form.submit "save" %>
    <%end%>
    
    要求“rails\u admin\u mark\u as\u publisher/engine”
    模块RailsAdminMarkAsPublisher
    结束
    需要“rails\u admin/config/actions”
    模块RailsAdmin
    模块配置
    模块动作
    类markaspublishertrue)
    flash[:success]=t(“admin.flash.successful”,:name=>@model\u config.label,:action=>t(“admin.actions.mark\u as\u publisher.done”))
    重定向路径=索引路径
    其他的
    flash[:error]=t(“admin.flash.error”,:name=>@model\u config.label,:action=>t(“admin.actions.mark\u as\u publisher.done”))
    重定向路径=返回或索引
    结束
    结束
    结束
    结束
    结束
    结束
    结束
    结束
    
  • 现在,app/View/rails\u admin/main/mark\u as\u publisher.erb中的相同定义的视图如下所示

    require "rails_admin_mark_as_publisher/engine"
    
    module RailsAdminMarkAsPublisher
    end
    
    require 'rails_admin/config/actions'
    
    module RailsAdmin
      module Config
        module Actions
          class MarkAsPublihser < Base
            RailsAdmin::Config::Actions.register(self)
    
            register_instance_option :collection do
              true
            end
    
            register_instance_option :http_methods do
              [:get,:post]
            end
    
            register_instance_option :route_fragment do
              'mark_as_publisher'
            end 
    
            register_instance_option :controller do
              Proc.new do
                binding.pry
                if request.get?
                  respond_to do |format|
                    format.html { render @action.template_name} 
                  end
                elsif request.post?
                  redirect_path = nil
                  if @object.update_attributes(:manager => true)
                    flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.mark_as_publisher.done"))
                    redirect_path = index_path
                  else
                    flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.mark_as_publisher.done"))
                    redirect_path = back_or_index
                  end
                end  
              end
            end  
          end
        end
      end
    end
    
    <%=  rails_admin_form_for @object, :url => mark_as_publisher_path(:model_name => @abstract_model.to_param, :id => @object.id), :as => @abstract_model.param_key,:method => :post ,:html => { :class => "form-horizontal denser", :data => { :title => "Mark" } } do |form| %>
      <%= form.submit "save" %>
    <%end%>
    
    mark_as_publisher_path(:model_name=>@abstract_model.to_param,:id=>@object.id),:as=>@abstract_model.param_key,:method=>:post,:html=>{:class=>“form horizontal denser”,:data=>{:title=>“mark”}do}form
    
    mark_as_publisher的get和post url确实位于上面的控制器define下,保存上述表单会导致调用错误

    找不到“/user/5/mark\u as\u publisher”的路由:方法=>“post”


    有没有人知道我遗漏了什么

    很抱歉延迟回复,但我也遇到了完全相同的问题

    编辑:我注意到你已经有了这个,你试过重新启动你的服务器吗

    如果您添加以下内容,它将修复它

      register_instance_option :http_methods do
          [:get,:post]
      end
    
    默认情况下,问题是
    操作
    仅响应:get请求

    如果你跑

     rake routes 
    
    你会看到一些类似的东西

      mark_as_publisher_path     GET     /:model_name/:id/mark_as_publisher(.:format)    rails_admin/main#mark_as_publisher