我是Ruby on Rails的新手,需要帮助构建和执行Ajax代码。
目前我的webapp有一个功能不佳的邀请功能。我将在一分钟内分享代码,但它可能有助于描述我目前所拥有的以及我正在尝试做的事情。因此,目前邀请工作的方式如下:
有2个按钮可邀请用户访问用户创建的页面。一个按钮用于网站上尚未注册用户的人,另一个按钮用于在网站上注册的人。当前的设置要求邀请人们的用户知道他们邀请的人是否是注册用户(因为你可以说这是一个非常大的缺陷)。这是代码的样子:
此代码位于执行ajax的View中(我顺便使用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)
}
})
}
以下是我要实施的内容: 我想创建一个带有新功能的文本字段和按钮。用户将他们想要邀请的人的电子邮件输入到新文本字段中,然后单击新按钮。
这个新按钮会触发一个新功能:新功能会将文本字段中的电子邮件与注册用户的电子邮件(可能使用 where 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()) )
}
非常感谢任何帮助。我很感激你花时间阅读我的问题,如果你需要澄清任何事情(我知道我可能做得很差,并且详细解释它),请不要犹豫!再次感谢你!
答案 0 :(得分:1)
似乎你在application.js中混合使用Rails代码,这是不可能的。
您应该向控制器触发一个Ajax请求(很容易使用jQuery.ajax)来检查用户是否已经存在,然后根据您的响应执行您选择的函数。
您应该为具有respond_to
块的JS请求准备控制器。
可能的解决方案:
respond_to do |format|
format.js do
if User.where('email = ?', params[:email]).first
render :text => "true"
else
render :text => "false"
end
end
end