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