javascript - 帮助通过 ror 通过 ajax 执行 javascript

标签 javascript mysql ruby-on-rails ajax database

我对 Ruby on Rails 还很陌生,需要一些帮助来构建和执行 Ajax 代码。

目前我的网络应用程序有一个邀请功能,但效果不太好。我将在一分钟内分享代码,但这可能有助于描述我当前拥有的内容以及我正在尝试执行的操作。因此,目前招工方式如下:

有 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 语句执行已经存在的函数之一。

不幸的是,我不知道如何正确地实现这一点。这是我目前所拥有的,但它不起作用:

在 View 中:

.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()) )
}

任何帮助将不胜感激。我很感谢您花时间阅读我的问题,如果您需要澄清任何事情(我知道我可能没有足够详细地解释它),请随时询问!再次感谢您!

最佳答案

看起来您正在 application.js 中混合 Rails 代码,这是不行的。
您应该向 Controller 触发 Ajax 请求(使用 jQuery.ajax 即可轻松完成),以检查用户是否已存在,然后根据您的响应执行您选择的函数。

您应该使用 respond_to block 为 JS 请求准备 Controller 。 可能的解决方案:

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 .

关于javascript - 帮助通过 ror 通过 ajax 执行 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7277384/

相关文章:

javascript - 钩子(Hook)只能在函数组件体内调用。但它已经在一个函数中了

mysql - 错误的 MySQL 更新查询后恢复?

ruby-on-rails - 在 Rails 中设置 session_id cookie SameSite 属性

ruby-on-rails - 将设计与 Mongoid 集成

javascript - 编辑本地存储中的项目

javascript - 有没有办法使用 gulp 删除 require.js Define([...]) 包装器的所有实例?

JavaScript 严重错误...将数组传递给 Charts.js 时出现语法错误 (MVC 5)

mySQL 专家 - 需要 'intersect' 的帮助

mysql - 用序列号mysql更新列

ruby-on-rails - Rails 无法将不允许的参数转换为散列