Ruby on Rails Ajax调用不起作用

时间:2015-10-06 12:35:31

标签: jquery ruby-on-rails ruby ajax

我对Ruby on Rails很陌生并且很难在rails中使用Ajax调用,我希望有人可以帮助我。

$.ajax({
            url: 'organizations/set_all_priorities',
            data: {ticket1: ticket1, ticket2: ticket2, ticket3: ticket3}, 
            method: "PUT" 
        });

这是我的Ajax调用。我有3个包含整数的票据变量。该方法调用我的组织控制器的方法set_all_priorities。

我的organizational_controller中的set_all_priorities方法如下所示:

  def set_all_priorities
  puts "I am now in set_all_priorities"

  org = Organization.find_by(:zendesk_organization_id => Ticket.find_by(:ticket_id => params[:ticket1]).organization_id)
  org.update_all(:priority1 => params[:ticket1])
  org.update_all(:priority2 => params[:ticket2])
  org.update_all(:priority3 => params[:ticket3])
  org.save
end

不幸的是它甚至没有调用方法,因为在调用我的Ajax函数时我无法在任何地方找到put命令。

最后,在我的路线中,我有以下一行:

  put 'organizations/set_all_priorities', :to => 'organizations#set_all_priorities'

我得到的错误是:ActiveRecord :: RecordNotFound(找不到具有'id'= set_all_priorities的组织):

好像我正在调用我的更新方法,但看到我已经在控制器中定义了我自己的方法,并且它没有被调用,这对我来说毫无意义。

如果有人知道这个解决方案会很棒。谢谢大家!

3 个答案:

答案 0 :(得分:2)

请尝试这样:

$.ajax({
  url: '/organizations/set_all_priorities',
  type: 'PUT',
  data: {ticket1: ticket1, ticket2: ticket2, ticket3: ticket3}
});

答案 1 :(得分:1)

基于该错误,看起来Rails将对该端点的调用定向到控制器中的#show方法。最可能的原因是您定义的自定义端点位于 resources :organizations之后

根据Rails文档,路由按路径文件中出现的顺序进行解释,这意味着您的自定义端点需要显示在resources :organizations之前,或者另一个端点接受参数。

put 'organizations/set_all_priorities', :to => 'organizations#set_all_priorities'
resources :organizations

见2.2节下的第二个附加说明。

http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

答案 2 :(得分:0)

可能organization应该是复数形式:

$.ajax({
        url: 'organizations/set_all_priorities',
        data: {ticket1: ticket1, ticket2: ticket2, ticket3: ticket3}, 
        method: "PUT" 
      });

 put 'organizations/set_all_priorities', :to => 'organizations#set_all_priorities'

至少rails生成器以复数形式创建控制器和视图(app/controllers/organizations_controller.rb/app/views/organizations/index.html.erb)并以单数形式建模(app/models/organization.rb