您的应用程序似乎有两个部分 - 一个支持 Web 的服务前端,以及一个将用户与物理设备相关联的硬件前端。我可能是错的,但我怀疑当您部署应用程序时,您会期望用户走到您的数据中心扫描他们的标签!
我可以看到一个明显的分离——你需要在用户附近有一个 RFID 阅读器,这样他们就可以在阅读器前面挥动 RFID 标签并执行某种操作,然后是用户在家并且拥有的第二部分无法访问 RFID 阅读器。
我建议将这两个部分保留为单独的应用程序,并具有一些将多个 RFID 与用户相关联的逻辑。在 Rails / Active Record 中,您可能有一个用户模型和一个与标签的 has_many 关联。
您需要创建两个应用程序 - 您的 Rails 应用程序和一个轻量级桌面应用程序。桌面应用程序在您的“扫描”机器上本地运行。首先可能是一个守护进程:查看“daemons”、“daemonize”和“daemon-kit” gems。
然后,在您的 Rails 应用程序中,您为创建用户和 RFID 标签之间的关联创建路线。例如。发布到 /users/:id/tags
您在上面编写的小型应用程序必须向该地址发送 POST。但是应用程序如何知道将标签与哪个用户名关联?在不知道你在做什么的情况下,我无法提供建议。识别出 RFID 后,您只需询问用户名 ( STDIN.gets ) 并在命令行中输入,或者在更复杂的应用程序中生成某种唯一的令牌,并通过扫描应用程序的 GET 读取.
例如。您可以将其作为守护程序运行以将 RFID 标签与用户关联:
require 'rubygems'
require 'nfc'
require 'httparty'
class TagAssociator
include HTTParty
base_uri 'example.com'
end
NFC.instance.find do |tag|
puts "What is your username?"
username = STDIN.gets
TagAssociator.post('/users/#{username}/tags', :query => {:uid => tag.uid})
end