【发布时间】:2014-01-22 20:40:12
【问题描述】:
我有一个由许多块组成的建筑模型。当用户创建新块时,块的名称不能与与该建筑物关联的任何其他块的名称匹配。我已经想出了如何在后端验证这一点,但我还想提供客户端验证以通知用户该名称已被另一个块使用。似乎这需要 AJAX 才能完成,但我无法弄清楚如何将 AJAX 链接到控制器方法。这是我目前所拥有的:
块/_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')
}
});
});
Routes.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
如果有更好的方法来解决这个问题,我也愿意接受建议。
【问题讨论】:
标签: jquery ruby-on-rails ajax validation