我认为这是一个非常简单的问题.我来自PhP背景,并且一直都是这样做的,所以我可能会以错误的方式看待这个.
我想在RoR中创建一个ajax处理程序.当用户单击按钮时,javascript将触发POST,并使用jQuery的ajax函数的"success:"参数向用户提供反馈.
问题是,当我真的需要控制器中的几行来完成数据库工作时,RoR正在尝试加载ajax处理程序的视图,并回显出将由用户的javascript解释的状态代码.
这只是一个mailchimp订阅控件页面,所以我只使用'home'控制器.
我的路线;
map.root :controller => 'home'
map.connect '/mcsubscribe', :controller => 'home', :action => 'mcsubscribe'
Run Code Online (Sandbox Code Playgroud)
我的家庭控制器;
class HomeController < ApplicationController
def index
# no content
end
def mcsubscribe
print params[:email]
end
end
Run Code Online (Sandbox Code Playgroud)
我的测试javascript,只是让你了解正在发生的事情;
function mcSubscribe() {
var email = jQuery("#signup_input_email").val();
jQuery.ajax({
type: "POST",
url: "http://domain.com/mcsubscribe",
data: "email=" + email,
cache: false,
success: function(result) {
alert(result);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我认为这将是一个常见的问题,但我已经搜索过,只是设法找到重定向的建议,因为用户永远不会访问/ mcsubscribe页面,这似乎不合适.
我只是想做一个没有视图的rails操作.
在我的'routes.rb'中
resources :pictures do
member do
post 'dislike'
end
end
Run Code Online (Sandbox Code Playgroud)
在我的'PictureController.rb'中,
这不起作用
def dislike
@picture = Picture.find(params[:id])
@like = Like.find(:user_id => current_user.id, :picture_id => params[:id])
@like.destroy
respond_to do |format|
format.html { render :action => :show, :id => params[:id], notice: 'You don\'t like this picture anymore.' }
format.json { render json: @picture }
end
end
Run Code Online (Sandbox Code Playgroud)
都不这样做
def dislike
@picture = Picture.find(params[:id])
@like = Like.find(:user_id => current_user.id, :picture_id => params[:id])
@like.destroy
respond_to do |format|
format.html { redirect_to @picture, notice: …Run Code Online (Sandbox Code Playgroud)