gpt4 book ai didi

jquery - Rails - 如何实现客户端的唯一性验证?

转载 作者:行者123 更新时间:2023-12-01 05:51:45 25 4
gpt4 key购买 nike

我有一个由许多 block 组成的建筑模型。当用户创建新 block 时,该 block 的名称不能与与该建筑物关联的任何其他 block 的名称匹配。我已经弄清楚如何在后端验证这一点,但我还想提供客户端验证以通知用户该名称已被另一个 block 使用。看起来这需要 AJAX 才能完成,但我无法弄清楚如何将 AJAX 链接到 Controller 方法。这是我到目前为止所拥有的:

Blocks/_form.html.erb

<%= form_for(@block, :remote => true, :html => { 'data-controller-name' => controller_name.singularize }) do |f| %>
<%= f.hidden_field :building_id %>

<div class="field">
<%= f.label :name, :class => "required" %>
<%= f.text_field :name, :class => "required", :placeholder => "Untitled block" %>
</div>

Blocks.js

$('#block_name').blur(function() {
$.ajax({
url: 'blocks/check_name',
success: function(data, textStatus, jqXHR) {
$('#block_name').removeClass('error')
},
error: function(data, textStatus, jqXHR) {
$("#block_name").addClass('error')
}
});
});

路线.rb

"/blocks/check_name" => "blocks#check_name"

blocks_controller.rb

def check_name
@building = Building.find(params[:block][:building_id])

respond_to do |format|
Format.json { render :json => @building.block_name_available(params[:block][:name]) }
end
end

建筑.rb

def block_name_available(name)
@block = Block.where(:building_id => self.id, :name => name)
Return @block.nil?
end

如果有更好的方法来解决这个问题,我也愿意接受建议。

最佳答案

您可以使用 JavaScript 的一种策略是在表单上放置一个提交监听器,并调用 event.preventDefault() 来阻止表单提交。然后,您可以发出一个 ajax 请求来检查唯一性,并包含成功回调和错误回调:成功时,正常提交表单,但出错时,通知用户您希望 block 名称必须是唯一的。

关于jquery - Rails - 如何实现客户端的唯一性验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com