Ruby on Rails: действие без представления - PullRequest
10 голосов
/ 02 марта 2012

У меня есть очень простая проблема.Я родом из PhP, и все время делал это, поэтому, возможно, я смотрю на это неправильно.

Я пытаюсь создать обработчик ajax в RoR.Когда пользователь нажимает кнопку, javascript запускает POST и дает пользователю обратную связь, используя параметр «success:» функции ajax jQuery.

Проблема в том, что RoR пытается загрузить представление для ajaxобработчик, когда мне действительно нужно несколько строк в контроллере для работы с базой данных, и выводить код состояния, который будет интерпретироваться пользовательским javascript.

Это всего лишь страница хранения подписки mailchimp,поэтому я использую только «домашний» контроллер.

Мои маршруты;

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 голосов
/ 02 марта 2012

Посмотрите на http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

Возможно, вам понадобится render :nothing => true

РЕДАКТИРОВАТЬ: неправильно понять ваш вопрос, render :text => "yourtext" должно соответствовать вашим потребностям

11 голосов
/ 02 марта 2012

Использование

print params[:email]

будет просто выводить это значение в журналы приложений, а не в ответ.

Вы хотите это:

render :text => params[:email]
2 голосов
/ 12 мая 2017

В Rails 5 вам нужно использовать 'plain':

render plain: params[:email]
0 голосов
/ 02 марта 2012

Вам нужно что-то вроде этого:

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 (т. Е. Пользователь щелкнул ссылку или заполнил обычную форму), выдается перенаправление, чтобы сообщить пользователю об успешной подписке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...