【问题标题】:Rails Send with AJAX parameters to custom action in controller from the viewRails 使用 AJAX 参数从视图发送到控制器中的自定义操作
【发布时间】:2019-07-05 15:03:57
【问题描述】:

我在执行某项操作时遇到了问题。我想从视图发送到自定义控制器操作,但出现错误:

Routing Error No route matches [GET] "/send_email_representing"

在控制台中我很高兴:

/send_email_representing?data_1=asas%2C.cs%2Csasn&data_2=a%2Cs.a%2Cc.d.cdsmoidnndvsodsn-nqw928h3%26Siabic&data_3=33

自定义操作

def send_email_representing
 @message = params[:data_1]
 @subject = params[:data_2]
 @user_representing = User.find(params[:data_3])
 SendMessageToUserMailer.email(@user_representing, @message, @subject).deliver_now
 render html: 'Good'.html_safe
end

视图中的函数

$("#sendEmailtoRepresenting").click(function() {


    var subject = $("#form1").val();
    var message = $("#form7").val();
    alert(subject+" "+message);
    var representing_id_1 = $("#hiddenEmailInput").val();

    var data_value = [subject,message,representing_id_1];
    console.log(JSON.stringify(data_value));

    if ((subject != null && subject != "") && (message != null && message != "") && (representing_id_1 != null && representing_id_1 != ""))
    {
        url = "/send_email_representing";
        $.ajax({
          type: "GET",  
          //dataType: "json",
          //http://0.0.0.0:3000/admin/send_email_representing/1,subject,message
          url: url,
          data: {data_1: data_value[0], data_2:data_value[1], data_3:data_value[2] },
          contentType: "application/json",
          success: function (data) {

            if (data == "Good"){
                displayEmailSuccesMenssage("Email has been sent");
            }           
          },
          error: function (data) {
              console.log("Error: "+data);
              alert("Error");
          }
        });

    } else {
        alert("Error");
    }   
    return false;

});

路线

get "send_email_representing" => "users#send_email_representing", :as => :send_email_representing

我不知道我是否定义了错误的路由,我必须放置参数,或者如果不是 POST 则不是 GET,或者控制器中的操作,但我注意到发送的参数是正确的,因为这个在错误页面中:

Request
Parameters:
{"data_1"=>"asas,.cs,sasn", "data_2"=>"a,s.a,c.d.cdsmoidnndvsodsn-nqw928h3&Siabic", "data_3"=>"33"} 

命令制作路线

admin_send_email_representing GET    /admin/send_email_representing(.:format)    admin/users#send_email_representing

我希望这可以帮助我解决这个问题。谢谢。

【问题讨论】:

  • 能否请您在控制台中运行rake routes 并在此处添加命令的输出。我看到在注释的 ajax 调用中,您有一个 /admin/ 范围,它显然不存在于路由中
  • admin_send_email_representing GET /admi/send_email_representing(.:format) admin/users#send_email_representing
  • 就是这个问题,要添加相应的admin scope
  • 非常感谢..!我在网址中添加了 并且效果很好。
  • 太棒了,如果它帮助您解决问题,记得将我的回答标记为已接受 =)

标签: jquery ruby-on-rails ajax routes actioncontroller


【解决方案1】:

根据您的 rake routes 命令的输出,您发出请求的路由在admin 范围内,因此您应该相应地将您的 JS 更改为:

  if ((subject != null && subject != "") && (message != null && message != "") && (representing_id_1 != null && representing_id_1 != ""))
    {
        url = "<%= admin_send_email_representing_path %>"; //<-- add admin scope here
        $.ajax({

【讨论】:

  • 也适用于 url = '';
  • 当然,这是一种更好的做法,因为它使用了 Rails 助手。我也会将其添加到我的回复中以供将来参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 2017-10-31
  • 1970-01-01
  • 2021-12-20
  • 2021-04-16
  • 2012-03-10
相关资源
最近更新 更多