帮助通过ror通过ajax执行javascript

时间:2011-09-01 22:36:46

标签: javascript mysql ruby-on-rails ajax database

我是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()) )
}

非常感谢任何帮助。我很感激你花时间阅读我的问题,如果你需要澄清任何事情(我知道我可能做得很差,并且详细解释它),请不要犹豫!再次感谢你!

1 个答案:

答案 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

您还应该检查Unobtrusive JavaScript Railscast