Ruby on Rails: 不需要视图的操作

10

我有一个非常简单的问题。我的背景是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页面,那似乎不太合适。

4个回答

14

渲染空并不是原帖作者想要实现的目标。他只想打印params[:email]的值。 - Koraktor
从您的链接中,render :text => params[:email] 完美地工作了,谢谢!我知道它一定很简单。 - lynks

11

使用

print params[:email]

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

你需要这个:

render :text => params[:email]

2
在Rails 5中,您需要使用“plain”:
render plain: params[:email]

0
你需要类似这样的代码:
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格式(例如用户单击链接或填写常规表单),则会发出重定向以告知用户订阅已成功。

我将在客户端处理所有用户反馈,如果从控制器返回“是”,则淡出表单并淡入消息。 - lynks
只是为了完整性而展示 :) 另一个优点是,它也适用于没有启用 JavaScript 的用户,如果还有这样的用户... - Veger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接