Ruby on Rails:没有View的动作

时间:2012-03-02 12:29:15

标签: ruby-on-rails

我认为这是一个非常简单的问题。我来自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 个答案:

答案 0 :(得分:14)

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

您可能需要render :nothing => true

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

答案 1 :(得分:11)

使用

print params[:email]

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

你想要这个:

render :text => params[:email]

答案 2 :(得分:2)

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

render plain: params[:email]

答案 3 :(得分: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格式(即用户单击链接或填写常规表单),则会发出重定向以告知用户订阅已成功。