Ruby on rails RubyonRails,验证与字符串连接的属性的唯一性

Ruby on rails RubyonRails,验证与字符串连接的属性的唯一性,ruby-on-rails,validation,client-side,Ruby On Rails,Validation,Client Side,我有一个属性,:group\u name,必须在客户端验证其唯一性。 但首先,我需要在属性上附加一个字符串,然后才对其进行验证。请不要问我为什么,我需要它=) 我有一张表格: <%= form_for Group.new, url: what_to_do_groups_path ,method: :get ,:validate => true do |f| %> <div class="field_label"> <%= f.label :group_na

我有一个属性,
:group\u name
,必须在客户端验证其唯一性。 但首先,我需要在属性上附加一个字符串,然后才对其进行验证。请不要问我为什么,我需要它=)

我有一张表格:

 <%= form_for Group.new, url: what_to_do_groups_path ,method: :get ,:validate => true do |f| %>
 <div class="field_label">
<%= f.label :group_name%>
</div>
<div class="field">
<%=f.text_field :group_name %>
</div>
<%= submit_tag "Submit",  :commit =>"submit" %>

<br class="clear" />
<br />
<%end%>
因此,用户输入“红牛”。
:group_name
的值为“RedBull”。我想附加一个字符串“_-Marc”,并且仅在数据库中验证(客户端),如果存在另一个名为“RedBull_-Marc”的组 我怎么做

我可以这样做吗

validates :group_name+"_Marc",      :uniqueness => { :case_sensitive => false}
如果我有多个字符串要附加,以便检查这些组是否已经在数据库中。 就像我想检查数据库中是否有“RedBull_Marc”或“RedBull_Kate” 所以我可以用正则表达式来实现它,比如:/(Marc | Katja)/但是我应该在哪里构建它呢

提前谢谢

编辑:
客户端验证应该存在。

您可以在验证属性之前使用钩子修改属性。您也可以编写自己的自定义验证来进行连接,但最好在验证之前使用
,因为这就是它的用途

模型:

class User < ActiveRecord::Base
  attr_accessible :group_name

  validates :group_name, :uniqueness => { :case_sensitive => false}

  before_validation :add_to_group_name

  protected
  def add_to_group_name
    self.group_name = group_name + '_Marc' # Edit however you want to here
  end
end
因此,您的模型将具有自定义验证:

class User < ActiveRecord::Base
  attr_accessible :group_name

  validate :check_group_name_uniqueness

  def check_group_name_uniqueness
    if User.where("group_name like ?", group_name + "%").count > 0
      errors.add(:group_name, "is already taken")
    end
  end
end
class用户0
错误。添加(:组名称,“已获取”)
结束
结束
结束

多重串联是什么?我需要看看数据库中的“红牛凯特”或“红牛马克”或“红牛皮普”是什么意思?我需要在用户输入组名后执行此操作。使用您的方法,我只能查找一个连接。在这种情况下,您需要编写一个搜索数据库中所有要查找的值的方法。这可能取决于您使用的数据库,但您可能可以搜索类似于
RedBull.*
的内容。您的自定义验证不再是客户端验证,不是吗?您可以通过JavaScript请求对其进行验证,但是验证必须在Rails中完成,因为客户端只能通过API访问数据库。您可以使用JavaScript提交Rails表单,并将其提交给用户,它似乎都在客户端上。
# % is a wildcard character and matches anything
# So group_name + "%" will match anything starting with group_name
User.where("group_name like ?", group_name + "%") 
class User < ActiveRecord::Base
  attr_accessible :group_name

  validate :check_group_name_uniqueness

  def check_group_name_uniqueness
    if User.where("group_name like ?", group_name + "%").count > 0
      errors.add(:group_name, "is already taken")
    end
  end
end