【问题标题】:Ruby on Rails: Action without ViewRuby on Rails:没有视图的操作
【发布时间】:2012-03-02 12:29:15
【问题描述】:

我有一个我认为非常简单的问题。我来自 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 页面,这似乎不合适。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    你可能需要render :nothing =&gt; true

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

    【讨论】:

    • 什么都不渲染并不是 OP 想要实现的。他只想打印params[:email] 的值。
    • 从您的链接中,render :text => params[:email] 工作得很好,谢谢!我知道它必须简单。
    【解决方案2】:

    使用

    print params[:email]
    

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

    你想要这个:

    render :text => params[:email]
    

    【讨论】:

      【解决方案3】:

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

      render plain: params[:email]
      

      【讨论】:

        【解决方案4】:

        你需要这样的东西:

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

        【讨论】:

        • 我将在客户端处理所有用户反馈,如果我从控制器收到“是”,则淡出表单,并淡入消息。
        • 为了完整起见仅显示 :) 一个优点是它也适用于没有 JavaScript(已启用)的用户,如果有任何剩余...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多