Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何从rails中的控制器调用方法?_Jquery_Ruby On Rails_Ruby_Ajax - Fatal编程技术网

Jquery 如何从rails中的控制器调用方法?

Jquery 如何从rails中的控制器调用方法?,jquery,ruby-on-rails,ruby,ajax,Jquery,Ruby On Rails,Ruby,Ajax,如何从我的r\U控制器调用方法 下面是我编写脚本的尝试,但它不起作用 $(function () { $('#toright').click(function () { var sel = document.getElementById("left"); var len = sel.options.length; var w_id = this.getAttribute('w_id');

如何从我的r\U控制器调用方法

下面是我编写脚本的尝试,但它不起作用

$(function () {
        $('#toright').click(function () {
            var sel = document.getElementById("left");
            var len = sel.options.length;
            var w_id = this.getAttribute('w_id');
            for (var i = 0; i < len; i++) 
                {
                if(sel.options[i].selected) 
                    {
                    $.ajax("/r_holidays/w_destroy", {holiday_id: sel.options[i].value, group_id: w_id}).done(function(data){});
                    }
                }
            history.go(0);
        })
      });
编辑:

这是我的控制器代码:

class RHolidaysController < ApplicationController
  before_action :set_r_holiday, only: [:show, :edit, :update, :destroy]

  def index
    @r_holidays = RHoliday.all
  end

  def new
    @r_holiday = RHoliday.new
  end

  def edit
  end

  def create
    render json: RHoliday.find_or_create(holiday_id: params[:holiday_id].to_s, group_id: params[:group_id].to_s) 
  end  

  def w_create
    @r_holiday = RHoliday.new(r_holiday_params)

    respond_to do |format|
      if @r_holiday.save
        format.html { redirect_to @r_holiday, notice: 'RHoliday was successfully created.' }
        format.json { render action: 'show', status: :created, location: @r_holiday }
      else
        format.html { render action: 'new' }
        format.json { render json: @r_holiday.errors, status: :unprocessable_entity }
      end
    end
  end  

  def update
    respond_to do |format|
      if @r_holiday.update(holiday_params)
        format.html { redirect_to @r_holiday, notice: 'RHoliday was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @r_holiday.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @r_holiday.destroy
    respond_to do |format|
      format.html { redirect_to holidays_url }
      format.json { head :no_content }
    end
  end

  def w_destroy
    render json: RHoliday.where(holiday_id: params[:holiday_id].to_s, group_id: params[:group_id].to_s).destroy 
  end




  private
    def set_holiday
      @r_holiday = RHoliday.find(params[:id])
    end

    def holiday_params
      params.require(:r_holiday).permit(:holiday_id, :group_id)
    end

end
class RHolidaysController
而my routes.rb中的相关行只是
参考资料:r\u holidays

我认为您在使用语法

尝试用
$替换您的
$。ajax
。get

我认为您正在使用语法


尝试用
$替换
$。ajax
。get

您的代码似乎是正确的,但这里缺少一点

您可以注意到您的控制器接收诸如GET、POST、PUT和DELETE之类的请求。这意味着.ajax方法应该指定您发送的请求的类型

如果要调用r_holidays控制器的销毁操作,请尝试以下smth:

$.ajax("/r_holidays", type: 'DELETE', {holiday_id: sel.options[i].value, group_id: w_id}).done(function(data){});

希望这有帮助

您的代码似乎是正确的,但这里缺少一点

您可以注意到您的控制器接收诸如GET、POST、PUT和DELETE之类的请求。这意味着.ajax方法应该指定您发送的请求的类型

如果要调用r_holidays控制器的销毁操作,请尝试以下smth:

$.ajax("/r_holidays", type: 'DELETE', {holiday_id: sel.options[i].value, group_id: w_id}).done(function(data){});

希望这有帮助

Chowlett的答案对于GET和POST是正确的-将“ajax”替换为“GET”/“POST”。或者通过传递设置对象来使用完整的“ajax”语法:。请注意,浏览器通过AJAX支持PUT和DELETE方法的历史值得怀疑,正如jQuery.ajaxapi文档中关于“type”设置所说的那样

如果您的后端支持通过POST进行HTTP方法模拟,就像Rails一样,我已经为此编写了一个jQuery插件,其中包含方便的$.put、$.patch和$.delete方法:


看看

Chowlett的答案对于GET和POST是正确的-将“ajax”替换为“GET”/“POST”。或者通过传递设置对象来使用完整的“ajax”语法:。请注意,浏览器通过AJAX支持PUT和DELETE方法的历史值得怀疑,正如jQuery.ajaxapi文档中关于“type”设置所说的那样

$.ajax({
  url: "/r_holidays/w_destroy",
  dataType: 'html',
  data: {
      holiday_id: sel.options[i].value,
      group_id: w_id
    },
  })
  .done(function() {
    console.log("success");
  });
如果您的后端支持通过POST进行HTTP方法模拟,就像Rails一样,我已经为此编写了一个jQuery插件,其中包含方便的$.put、$.patch和$.delete方法:

看看

$.ajax({
  url: "/r_holidays/w_destroy",
  dataType: 'html',
  data: {
      holiday_id: sel.options[i].value,
      group_id: w_id
    },
  })
  .done(function() {
    console.log("success");
  });
您需要传递要删除的记录的ID。然后它将从url调用方法,您可以在方法中找到您从$.ajax传递数据的记录

 url: "/r_holidays/:id/w_destroy"  I think you need to pass a Id here.

 var my_url = "/rholidays/" + <%= @object.id %> + "/w_destroy";
 pass my_url as url: my_url, in $.ajax  
这样你就可以破坏这个方法。或者rails提供了最佳ajax方法(Rjs)。你为什么不试试呢

您需要传递要删除的记录的ID。然后它将从url调用方法,您可以在方法中找到您从$.ajax传递数据的记录

 url: "/r_holidays/:id/w_destroy"  I think you need to pass a Id here.

 var my_url = "/rholidays/" + <%= @object.id %> + "/w_destroy";
 pass my_url as url: my_url, in $.ajax  

这样你就可以破坏这个方法。或者rails提供了最佳ajax方法(Rjs)。你为什么不试试呢?

谢谢!我试过了,但没用。我正在尝试这样做,用于创建/销毁表中的行。但是它不起作用。您的操作是否可以通过GET路径访问,或者仅通过POST/PUT/DELETE访问?$。GET将按照GET路径访问您需要使用
DELETE
方法调用的
r\u holidays\show
谢谢!我试过了,但没用。我正在尝试这样做,用于创建/销毁表中的行。但是它不起作用。您的操作可以通过GET路由访问,还是仅通过POST/PUT/DELETE访问?$。GET将按照GET路由执行哪些路由到
r\u holidays\show
您需要使用
DELETE
方法调用。我们可以查看控制器代码和路由的相关部分吗?rb?您是否在路由文件中添加了w\u destroy操作?我没有。我必须在哪里添加它?我刚刚在我的routes.rb中添加了资源:r_假日。我还需要在那里添加什么?我们可以看到控制器代码和routes.rb的相关部分吗?你在你的routes文件中添加了w_destroy操作吗?我没有。我必须在哪里添加它?我刚刚在我的routes.rb中添加了资源:r_假日。我还需要在那里添加什么?当我添加这一行时,由于类型:“DELETE”,我得到一个语法错误。这正常吗?当我添加这一行时,由于类型:“DELETE”,我得到一个语法错误。这正常吗?