如何在 Rails 6.1 中使用 AJAX 请求执行具有属性的 ruby​​ 函数?

Posted

技术标签:

【中文标题】如何在 Rails 6.1 中使用 AJAX 请求执行具有属性的 ruby​​ 函数?【英文标题】:How to execute ruby function with attributes using AJAX request in Rails 6.1? 【发布时间】:2021-08-27 15:10:07 【问题描述】:

我有以下家庭控制器:

class HomeController < ApplicationController
  def index
    @data = EmergencyFriend.all
    @jsonData = JSON.pretty_generate(@data.as_json)
  end

  def about
  end

  def alertEmergencyContant
    account_sid = "my id"
    auth_token = "my token"

    @client = Twilio::REST::Client.new(account_sid, auth_token)

    @client.messages.create(
        to: "+number 1",
        from: "+number 2",
        body: "hello world !"
    )
  end
end

基本上,在我的home/index.html.erb 中只有一个按钮。当按下按钮时,它会显示一条警报消息,允许用户选择一个选项来发送短信。

我要做的是在我的家庭控制器中调用alertEmergencyContant 方法,以便我可以发送消息。我还想将 phone_number 作为该请求的参数传递。有人建议为此我应该使用 AJAX。我在我的 rails 项目中成功安装了 jquery 和 ajax 并按预期工作。我无法理解的是如何将其创建为 POST 请求。

我的主目录的路线列表是:

root       GET       /                          home#index
root       GET       /home/about(.:format)      home#about

但是alertEmergencyContant 上什么都没有。如何在路由中声明它并将其作为 POST 请求?如何使用 AJAX 将属性从 javascript 传递给 ruby​​?

到目前为止,这是我的 ajax 请求(可行):

$.ajax(
    url: '/',
    type: 'GET',
    success: function(event)
        alert("sending Message");
    
);

更新:

def about   
    @thisNumber = params[:phone_number] 
    puts "helllloooooooooooooo        " + @thisNumber
end
function ajaxRequest()
    $.ajax(
        url: 'home/about/?phone_number:1244211',
        type: 'GET',
        success: function(event)
            alert("passed");
        ,
        failed: function()
            alert("has failed")
        ,
        done: function()
            alert("after")
        
    );

【问题讨论】:

【参考方案1】:

您需要为您的操作添加路线

# routes.rb 
post 'some_url' => 'home#alert_emergency_contact'

您现在可以在您的 javascript 中使用它

$.ajax(
    url: '/some_url', // This needs to match what you choose in routes.rb
    type: 'POST',
    success: function(event)
        alert("sending Message");
    
);


PS:在 Ruby 中,动作名称是 always_snake_case,而不是 camelCase

【讨论】:

以上是关于如何在 Rails 6.1 中使用 AJAX 请求执行具有属性的 ruby​​ 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AJAX 请求将用户在类变量中的 HTML5 位置从 JavaScript 传递到 Rails 控制器?

当表单中存在文件字段时,Rails 不发出 Ajax 请求

使用 AJAX 请求下载文件数据 - ruby​​ on rails 3

如何中断 Rails 中的 AJAX 请求?

如何在 Rails 6.1 中使用邮件程序?

Rails 跨域 ajax 获取请求 (CORS)