Мне трудно разобраться в хитрой проблеме. Вот что я пытаюсь достичь:
Я хотел бы иметь text_field
, где пользователь вводит адрес электронной почты человека, которого он хотел бы добавить, и Rails проверяет, зарегистрирован ли этот адрес электронной почты. Если это электронное письмо зарегистрировано (и учетная запись существует), оно будет обработано из A и отправит электронное письмо «присоединиться к проекту», если электронное письмо не совпадает с электронным письмом в БД (пользователь не существует), оно отправит другую форму, форму B и отправьте электронное письмо с приглашением.
У меня сейчас есть функции, работающие отдельно. Один для приглашения существующих пользователей и один для приглашения новых пользователей. Вот что у меня есть.
вид:
= 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"
#add_existing_member_form.template.hide
.label_top
= label_tag 'Enter email address or name'
= text_field_tag 'new_member_email', "", :class => "existing_member_autocomplete"
#membership_form.template.hide
%p Pending acceptance.
= f.fields_for(:memberships, Membership.new(), :child_index => 'new_membership') do |ff|
= render 'membership', :ff => ff
application.js:
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)
}
})
}
var insert_membership_form = function(item){
$('#membership_form_footer').before("<h2>"+item.label+"</h2>")
var template = $('#membership_form').clone()
$(template).find('#project_memberships_attributes_new_membership_user_id').val(item.id)
$('#membership_form_footer').before( template.html().replace(/new_membership/g, new Date().getTime()) )
}
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()) )
}
Контроллер:
@users_for_autocomplete = User.not_member_of(@project.id).to_json(:only => :id, :methods => :label)
Есть ли способ запустить оператор if / else
в функции insert_membership_form (), чтобы, если пользовательский ввод не совпадал ни с одной из записей, вместо рендеринга insert_membership_form с записью пользовательского интерфейса, он вставлял членство в приглашении?
В качестве альтернативы, есть ли более простой способ проверить наличие электронной почты без использования jQuery? Я имею в виду, есть ли способ написать этот код в rails, чтобы пользователь просто вводил электронное письмо, проверял, существует ли он, если true, для которого он отображает Existing Member, если false, он представляет форму New Member? Ваша помощь будет принята с благодарностью!
Спасибо за вашу помощь и время !!