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}
已存在”如果号码不唯一,则将用户重定向到该房间的更新页面。