Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何验证在文本框中输入的rails关联模型_Ruby On Rails_Validation - Fatal编程技术网

Ruby on rails 如何验证在文本框中输入的rails关联模型

Ruby on rails 如何验证在文本框中输入的rails关联模型,ruby-on-rails,validation,Ruby On Rails,Validation,我使用的是rails 2.3 如何验证使用文本框输入的“属于”关联字段?e、 g.一篇博客文章属于某个类别,但它不是使用select输入的,而是作为类别名称,让我们假设它在文本框中是唯一的 可能的错误是:格式错误,数据库中没有此类类别 如果我将字符串直接分配给关联,则会出现AssociationTypeMismatch错误,因此我无法分配给同一属性,然后使用自定义的before\u validate方法 如果我在控制器中执行转换工作并将其添加到模型的errors集合中,它仍然会被保存。我认为er

我使用的是rails 2.3

如何验证使用文本框输入的“属于”关联字段?e、 g.一篇博客文章属于某个类别,但它不是使用select输入的,而是作为类别名称,让我们假设它在文本框中是唯一的

可能的错误是:格式错误,数据库中没有此类类别

如果我将字符串直接分配给关联,则会出现AssociationTypeMismatch错误,因此我无法分配给同一属性,然后使用自定义的before\u validate方法

如果我在控制器中执行转换工作并将其添加到模型的errors集合中,它仍然会被保存。我认为errors集合在验证开始之前已被清除


在使用标准错误集合的同时,我应该如何做到这一点

> P>您可能需要考虑使用具有JavaScript自动完成功能的哑文本框。在表单中为该关联的ID放置一个隐藏字段。当JS返回匹配列表时,包括ID,并在选择项时填充隐藏ID字段

否则,这可能会有所帮助。注意,这是未经测试的代码

# Assumed that "Obj" is the class of your belongs_to association

attr_accessor :obj_name
def obj_name= value
  self.obj = Obj.find_by_name(params[:obj_name])  
end

validate :validate_obj
def validate_obj
  # If there's no obj, report an error on our pseudo-field
  return if self.obj.present?
  return if self.obj_name.blank? # Allow empty object if blank name was specified
  error.add(:obj_name, "does not appear to be a valid obj name")
end

类别字段的数据类型是什么?@Michael该字段是一个引用整数,输入是一个字符串。这是有意义的,只是没有对象/nil也是有效值,所以存在?没用。我开始认为我需要另一个属性,使用attr_访问器创建的属性会起作用吗?要存储用户输入的字符串并仅在validate中解析对象,使用attr\u访问器是一种很好的方法,请覆盖setter,如get\u id\u from\u name,以设置真实属性。进行编辑以允许空值。