我对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的组织):
好像我正在调用我的更新方法,但看到我已经在控制器中定义了我自己的方法,并且它没有被调用,这对我来说毫无意义。
如果有人知道这个解决方案会很棒。谢谢大家!
答案 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
)