首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Rails中的按钮调用控制器方法

通过Rails中的按钮调用控制器方法
EN

Stack Overflow用户
提问于 2017-03-08 20:18:42
回答 2查看 1.2K关注 0票数 0

我想为destroy_referrals方法在视图/companies/ed.html.haml中创建一个按钮,但我无法让该按钮工作。要调用按钮上的操作,我尝试创建一个新的路由,但我仍然收到错误操作'destroy_referrals‘为CompaniesController找不到

我在destroy_referrals中创建了一个Admin::CompaniesController方法

代码语言:javascript
复制
def destroy_referrals
    load_company
    @company.destroy_referrals
    flash[:notice] = 'Referrals deleted'
    redirect_to :action => :index
end 

它操作company.rb模型来查找来自具有相同company_id的用户的引用,并销毁它们,

代码语言:javascript
复制
def destroy_referrals
    Referral.joins(:user).where("users.company_id = ?", self.id).destroy_all
end

有些东西我试过了.

routes.rb

代码语言:javascript
复制
post '/destroy_referrals' => 'admin/companies#destroy_referrals', :as => 'destroy_referrals'

意见/公司/编辑.views.views

代码语言:javascript
复制
= button_to 'Destroy Referrals', destroy_referral_path

= button_to 'Destroy Referrals', admin_company_destroy_referral_path(@company)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-08 20:41:49

  1. HTML链接(不是“按钮”)不会直接连接到调用“方法”。
  2. button_to方法创建一个HTML按钮,该按钮的行为与链接类似,但具有不同的视觉样式。
  3. Ruby有一些方法,它们是一个常见的编程构造。
  4. HTML具有一个href属性,浏览器可以通过向其发出后续的HTTP来遵循该属性。
  5. 当浏览器向Rails应用程序发送请求时,应用程序将使用您的路由来确定如何处理该请求。
  6. 在Rails中处理请求的传统方法是将请求路由到控制器操作。
  7. 按照约定,对RESTful的/products/1请求可能会路由到ProductsController上的show操作。
  8. 在Rails中,通过在控制器上定义一个方法来创建一个“action”。
  9. representational RESTful路由反映了RESTfultate transfer范例,包括读取、列出、创建、更新和删除记录/对象。
  10. 要删除(或销毁)记录,RESTful约定将向Rails应用程序发送一个DELETE请求,该请求将被路由到由destroy方法定义的相关控制器的destroy操作。
  11. 您可以创建一个HTML链接,导致浏览器使用link_to助手发送这样的请求,并在参数中指定method: :delete
  12. 您可以定义一个路由,指示Rails使用内置的“足智多谋”路由来处理这样的请求:例如,resources :products。或者,可以定义一个显式路由:delete '/products/:id' => 'products#destroy'

总之,Rails给您的错误是,它无法在destroy_referrals中找到CompaniesController方法。在Admin::CompaniesController中定义方法不会做任何事情来解决这个问题。

票数 3
EN

Stack Overflow用户

发布于 2017-03-09 19:13:20

@Swards该路由需要删除‘companies/:id/ delete _referrals’=>‘companies#delete_destroy_referrals’,作为=> 'destroy_referrals‘

我想这可能是个简单的解决办法。您还需要管理名称空间吗?

考虑一下这一点,而不是创建一个命名的路由

代码语言:javascript
复制
namespace 'admin' do
  resources :companies do
    delete 'destroy_referrals', :on => :member, :as => 'destroy_referrals'
  end
end

并将其称为admin_destroy_referrals_company_path

代码语言:javascript
复制
= button_to 'Destroy Referrals', admin_destroy_referrals_company_path(@company), :method => :delete
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42681152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档