Ruby on Rails:没有View的动作

我认为这是一个非常简单的问题。 我来自PhP背景,并且一直这样做,所以我可能会以错误的方式看待这个。

我想在RoR中创建一个ajax处理程序。 当用户单击按钮时,javascript将触发POST,并使用jQuery的ajax函数的“success:”参数向用户提供反馈。

问题是,当我真的只需要控制器中的几行来完成数据库工作时,RoR正在尝试加载ajax处理程序的视图,并回显出将由用户的javascript解释的状态代码。

这只是一个mailchimp订阅控件页面,所以我只使用’home’控制器。

我的路线;

map.root :controller => 'home' map.connect '/mcsubscribe', :controller => 'home', :action => 'mcsubscribe' 

我的家庭控制器;

 class HomeController < ApplicationController def index # no content end def mcsubscribe print params[:email] end end 

我的测试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); } }); } 

我认为这将是一个常见的问题,但我已经搜索过,只是设法找到重定向的建议,因为用户永远不会访问/ mcsubscribe页面,这似乎不合适。

运用

 print params[:email] 

只会将该值打印到应用程序日志中,而不是打印到响应中。

你要这个:

 render :text => params[:email] 

看看http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

您可能需要render :nothing => true

编辑:误读了你的问题, render :text => "yourtext"应该符合你的需求

在Rails 5中,你需要使用’plain’:

 render plain: params[:email] 

你需要这样的东西:

 def mcsubscribe # Do something to unsubscribe respond_to do |format| format.html { redirect_to(success_page) } format.js { render :text => params[:email] } end end 

如果使用ajax,则params[:email]将作为文本发送。 如果需要HTML格式(即用户单击链接或填写常规表单),则会发出重定向以告知用户订阅已成功。