如何从r_holidays_controller调用方法?
这是我尝试编写脚本,但它不起作用。
$(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);
})
});
我认为,$.ajax( ... )
中必定存在错误。
所有人都有想法让这个有效吗? 在检查我的路径时,我意识到,我没有被列出......
r_holidays_path GET /r_holidays(.:format) r_holidays#index
POST /r_holidays(.:format) r_holidays#create
new_r_holiday_path GET /r_holidays/new(.:format) r_holidays#new
edit_r_holiday_path GET /r_holidays/:id/edit(.:format) r_holidays#edit
r_holiday_path GET /r_holidays/:id(.:format) r_holidays#show
PATCH /r_holidays/:id(.:format) r_holidays#update
PUT /r_holidays/:id(.:format) r_holidays#update
DELETE /r_holidays/:id(.:format) r_holidays#destroy
编辑:
这是我的控制器代码:
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
我的routes.rb中的相关行只是resources :r_holidays
答案 0 :(得分:2)
答案 1 :(得分:1)
你的代码似乎是正确的,但这里有一件事你没有。
您可以注意到您的控制器收到GET,POST,PUT,DELETE等请求。这意味着您的.ajax方法应该指定您发送的请求的类型。
如果你想调用r_holidays控制器的destroy动作,你应该尝试这样的smth:
$.ajax("/r_holidays", type: 'DELETE', {holiday_id: sel.options[i].value, group_id: w_id}).done(function(data){});
希望这有帮助!
答案 2 :(得分:1)
$.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
你的方法应该包含。
data = params[:holiday_id]
group = params[:group_id]
holiday = Holiday.find(data)
holiday.destroy
这样你可以破坏方法。或rails提供了最佳的ajax方法(Rjs)。为什么不试试呢?
答案 3 :(得分:0)
Chowlett的答案对于GET和POST是正确的 - 用'get'/'post'替换'ajax'。或者通过传递设置对象https://api.jquery.com/jQuery.ajax/来使用完整的'ajax'语法。请注意,通过AJAX对PUT和DELETE方法的浏览器支持有一个可疑的历史记录,正如它在'type'设置的jQuery.ajax API文档中所述。
如果你的后端支持通过POST进行HTTP方法仿真,就像Rails一样,我已经用方便的$ .put,$ .patch和$ .delete方法编写了一个jQuery插件:
https://github.com/adjohnson916/jquery-methodOverride
看看吧!