Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_View_Model - Fatal编程技术网

Ruby on rails 如何让模型验证与Rails中的视图层对话以提供简单的功能?

Ruby on rails 如何让模型验证与Rails中的视图层对话以提供简单的功能?,ruby-on-rails,validation,view,model,Ruby On Rails,Validation,View,Model,我有一个房间模型,可以验证其房间号是唯一的。但是,当用户创建一个新的文件室实例时,如果他们尝试创建一个已经存在的文件室,而不是显示标准的“this Room ready exists”错误消息,我希望提供一个指向该文件室的链接,以便他们可以对其进行编辑。我希望错误信息显示:x房间已经存在单击此处编辑该文件室。其中“单击此处”文本是指向该房间对象编辑路径的链接 在Rails中是否有这样或类似的方法?任何建议都将不胜感激 您可以使用客户端验证gem来使用javascript中的ruby验证(如果您使

我有一个
房间
模型,可以验证其房间号是唯一的。但是,当用户创建一个新的
文件室
实例时,如果他们尝试创建一个已经存在的文件室,而不是显示标准的“this Room ready exists”错误消息,我希望提供一个指向该文件室的链接,以便他们可以对其进行编辑。我希望错误信息显示:x房间已经存在单击此处编辑该文件室。其中“单击此处”文本是指向该房间对象编辑路径的链接


在Rails中是否有这样或类似的方法?任何建议都将不胜感激

您可以使用客户端验证gem来使用javascript中的ruby验证(如果您使用的是jquery),如railscast 263所示

您可以创建一个自定义验证器,该验证器可以查找现有的房间id,并将指向该房间id的链接传递到返回到视图的错误消息,如:

# lib/room_existence_validator.rb
class RoomExistenceValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    if existing_room = Room.find_by_id(value)
      # unfortunately url_for helper is not defined here so it's hard-wired
      room_link = "/rooms/#{existing_room.id}/edit"
      object.errors[attribute] << "#{link_to "Click here", room_link} to edit that room"
    end
  end
end
b) 发送您的验证请求,例如,通过添加一个机架中间件来响应您的验证程序路由,如客户端验证wiki中所述


希望有帮助:D

您可以使用客户端验证gem来使用javascript中的ruby验证(如果您使用的是jquery),如railscast 263所示

您可以创建一个自定义验证器,该验证器可以查找现有的房间id,并将指向该房间id的链接传递到返回到视图的错误消息,如:

# lib/room_existence_validator.rb
class RoomExistenceValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    if existing_room = Room.find_by_id(value)
      # unfortunately url_for helper is not defined here so it's hard-wired
      room_link = "/rooms/#{existing_room.id}/edit"
      object.errors[attribute] << "#{link_to "Click here", room_link} to edit that room"
    end
  end
end
b) 发送您的验证请求,例如,通过添加一个机架中间件来响应您的验证程序路由,如客户端验证wiki中所述


希望这有帮助:D

如果验证失败,您可以在验证中提出错误,并在控制器中捕获该错误。如果控制器捕捉到它,您可以呈现一个包含链接的特殊视图来编辑房间。似乎可以使用Ajax或更简单地使用
,在创建
验证之前返回“房间
。{@room.number}
已存在”如果编号不唯一,则会将用户重定向到该
房间的更新页面。如果验证失败,您可以在验证中引发错误,并在控制器中捕获该错误。如果控制器捕捉到它,您可以呈现一个包含链接的特殊视图来编辑房间。似乎可以使用Ajax或更简单地使用
,在创建
验证之前返回“房间
。{@room.number}
已存在”如果号码不唯一,则将用户重定向到该
房间的更新页面。