我正在使用 session 将项目存储在用户的愿望 list 中。
心愿单存储为唯一项目 ID 的简单数组 - 普通用户会在愿望 list 中存储大约 40 个项目,但用户可能希望在他们的愿望 list 中添加多达几百个项目。
我想生成一个唯一的 URL,以便他们以后可以重新访问他们的心愿单,或者与可以将其用作自己列表的起点的其他人共享心愿单。
我不会从用户那里收集任何数据,他们不会有一个帐户来链接他们的心愿单数据。
我正在考虑的两种处理方法是:
将数据存储为 URL 末尾的哈希值,可以是 url 编码的序列化字符串或 base64 编码的字符串。 这似乎更可取,因为我不需要存储愿望 list ,并且这为用户修改现有列表提供了很大的灵 active ,但是我怀疑如果愿望 list 中的项目数量增加并且 URL 长度超过可行的字符数。
或
生成一个具有唯一 ID 的 url,并将心愿单保存到数据库中。我看到的问题是每次用户希望生成 URL 时都会向数据库添加一个新条目,并且由于这些条目不会绑定(bind)到任何一个用户,因此每次都需要生成一个新条目用户对列表进行任何修改的时间。
有没有其他更好的方法来处理这个问题,或者有办法管理与上述方法相关的问题?
最佳答案
我认为从长远来看,走数据库路线将是最灵活的解决方案。只要您的数据建模良好,每次用户进行选择时添加/删除记录应该不是问题。 “选择”应该只创建通过键引用两个事物的记录;一个用户,一个产品加上数量和价格。
就是说,我会用类似这样的模型来做:
Wishlist 与 selection_set 是分开的,因为您可以将 selection_set 重复用于其他事情,例如购物车或订单。
完成后,您只需将 public_hash 存储在 cookie/session 中,并为它们提供一个链接的 url。
这是否适用于您想到的场景?还是有任何额外的限制?
替代解决方案:
虽然我认为数据库是一个可行的解决方案,但我可以想到几个替代方案:
压缩和编码数据:
You can take a comma separated list of wishlist item ids (or some sort of unique identifier), then base64_encode( gzinflate( $list ) ) and use that as your hash. You can then use gzdeflate( base64_decode( $hash ) ) to get your list of items. In order to avoid doing this on every page load, you can continue storing your selection within the session and only re-generate the hash when the list changes.
gzdeflate + base64 应将您的哈希值保持在合理的长度内,以应对非常大的愿望 list 选择。您可以编写一些单元测试来查看散列/列表可以假设多长时间。
这个方法感觉完全是 hack :-)
使用 Redis :
您可以设置一个 Redis 服务器并在其上存储心愿单。它将持久、可扩展、快速且易于访问。
关于php - 将 session 状态保存为唯一的 url 以便与他人共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548637/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur