Помогите с выполнением JavaScript через AJAX через ROR - PullRequest
0 голосов
/ 02 сентября 2011

Я довольно новичок в Ruby on Rails и мне нужна помощь в построении и выполнении Ajax-кода.

В настоящее время в моем веб-приложении есть функция приглашения, которая работает не очень хорошо.Я поделюсь кодом через минуту, но может быть полезно описать, что у меня есть в настоящее время, и что я пытаюсь сделать.Таким образом, в настоящее время способ приглашения на работу выглядит следующим образом:

Есть 2 кнопки для приглашения людей на страницу, созданную пользователем.одна кнопка для людей, которые еще не зарегистрированы на сайте, а другая кнопка для людей, которые зарегистрированы на сайте.Эта текущая настройка требует, чтобы пользователь, который приглашает людей, знал, является ли приглашаемый человек зарегистрированным пользователем (как вы можете сказать, это довольно большой недостаток).Вот как выглядит код:

этот код находится в представлении, которое выполняет AJAX (я, кстати, использую HAML и при необходимости могу выложить больше кода):

.invitepeople_buttons
  = button_to_function 'Add Existing User', 'insert_add_existing_member_form()', :class => "submit"
  = button_to_function 'Add New User', 'insert_invitation_membership_form()', :class => "floatright submit"

этот код находится в файле application.js:

var insert_invitation_membership_form = function(){
  $('#membership_form_footer').before("<h2>Add New User</h2>")
  var template = $("#invitation_membership_form").clone()
  $("#membership_form_footer").before( template.html().replace(/new_membership/g, new Date().getTime()) )
}

var insert_add_existing_member_form = function(){
  $('#membership_form_footer').before("<h2>Add Existing User</h2>")
  var template = $("#add_existing_member_form").clone()
  $("#membership_form_footer").before( template.html() )
  $('.existing_member_autocomplete').autocomplete({ 
    source: users_for_autocomplete,
    select: function(event, ui){
      insert_membership_form(ui.item)
    }
  })
} 

Вот что я хотел бы реализовать: я хотел бы создать текстовое поле и кнопку с новой функцией.Пользователь вводит адрес электронной почты человека, которого он хотел бы пригласить, в новое текстовое поле, а затем нажимает новую кнопку.

Эта новая кнопка вызовет новую функцию: новая функция будет сравнивать электронную почту в текстовом поле с электронной почтой зарегистрированных пользователей (вероятно, с использованием функции где sql) и в зависимости от того, будет ли илиесли пользователь не завершит работу (то есть: совпадения электронной почты в текстовом поле и электронная почта в базе данных), он выполнит одну из уже существующих функций с помощью оператора if.

К сожалению, я не знаю, как это сделать правильно.Вот что у меня на данный момент, но не работает:

В виде:

.invitepeople_buttons

      = text_field "member_email", "" 
      = button_to_function 'Add Member', 'test_email_for_membership()', :class => "submit"

В application.js:

var test_email_for_membership = function(){
    if user.where(:email => member_email).exists? = true
      $('#membership_form_footer').before("<h2>Add Existing User</h2>")
      var template = $("#add_existing_member_form").clone()
      $("#membership_form_footer").before( template.html() )
      $('.existing_member_autocomplete').autocomplete({ 
        source: users_for_autocomplete,
        select: function(event, ui){
          insert_membership_form(ui.item)
        }
      })
    else
      $('#membership_form_footer').before("<h2>Add New User</h2>")
      var template = $("#invitation_membership_form").clone()
      $("#membership_form_footer").before( template.html().replace(/new_membership/g, new Date().getTime()) )
}

Любая помощьбудет очень ценится.Я благодарен за то, что вы нашли время, чтобы прочитать мой вопрос, и если вам нужно что-то прояснить (я знаю, что я, вероятно, сделал плохую работу, объясняя это достаточно подробно), пожалуйста, не стесняйтесь спрашивать!Еще раз спасибо!

1 Ответ

1 голос
/ 02 сентября 2011

Похоже, вы смешиваете код Rails в application.js, и это нет, нет.
Вы должны инициировать Ajax-запрос (легко с jQuery.ajax ) к контроллеру, чтобы проверить, существует ли пользователь, и затем на основе вашего ответа выполнить выбранную вами функцию.

Вы должны подготовить свой контроллер для запроса JS с блоком respond_to. Возможное решение:

respond_to do |format|
  format.js do
    if User.where('email = ?', params[:email]).first
      render :text => "true"
    else
      render :text => "false"
    end
  end
end

Вы также должны проверить Ненавязчивый JavaScript Railscast .

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