我正在编写一个rails应用程序,就其本质而言,不需要用户注册,因此不能使用身份验证作为保护记录的常用方法.(我知道,我知道......)此处的用户信息仅限于电子邮件地址.所以我确实需要一种方法来使我的模型ID不可预测,以便其他ID不容易被猜到.(我知道我知道...)
我已经尝试使用像uuidtools这样的插件随机化id,因为创建了记录,如下所示:
require 'uuidtools'
class Post < ActiveRecord::Base
def before_create()
self.id = OpenSSL::Digest.SHA1.hexdigest(UUID.timestamp_create())
end
end
Run Code Online (Sandbox Code Playgroud)
......一开始看起来不错,但有趣的事情发生了.ActiveRecord有时会尝试在id中插入一个0值,我会收到错误,例如'找不到id = 0的帖子'等等...
我已经没想完了.有人可以帮忙吗?谢谢.
感谢大家的帮助.你发布了一些(我应该预料到的)答案,表明我的整个方法都是错误的,或者低级代码永远不必知道它是否在容器中运行.我倾向于同意.但是,我正在处理一个复杂的遗留应用程序,并且没有选择对当前问题进行重大重构.
让我退后一步,问问题是我原来问题的动机.
我有一个在JBoss下运行的遗留应用程序,并对低级代码进行了一些修改.我为我的修改创建了一个单元测试.为了运行测试,我需要连接到数据库.
遗留代码以这种方式获取数据源:
(jndiName是一个已定义的字符串)
Context ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup(jndiName);
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我在单元测试下运行此代码时,Context没有定义数据源.我的解决方案是尝试查看我是否在应用程序服务器下运行,如果没有,则创建测试DataSource并返回它.如果我在app服务器下运行,那么我使用上面的代码.
所以,我真正的问题是:这样做的正确方法是什么?是否有一些批准的方式单元测试可以设置上下文以返回适当的数据源,以便被测代码不需要知道它在哪里运行?
对于上下文:我的原始问题:
我有一些Java代码需要知道它是否在JBoss下运行.是否有规范的方法来判断代码是否在容器中运行?
我的第一种方法是通过实验开发出来的,包括获取初始上下文和测试它可以查找某些值.
private boolean isRunningUnderJBoss(Context ctx) {
boolean runningUnderJBoss = false;
try {
// The following invokes a naming exception when not running under
// JBoss.
ctx.getNameInNamespace();
// The URL packages must contain the string "jboss".
String urlPackages = (String) ctx.lookup("java.naming.factory.url.pkgs");
if ((urlPackages != null) && (urlPackages.toUpperCase().contains("JBOSS"))) {
runningUnderJBoss = true;
}
} catch (Exception e) {
// If we …Run Code Online (Sandbox Code Playgroud) 有没有办法使用linq for nhibernate将fetchmode设置为渴望多个对象.似乎有一种扩展方法,它只允许我设置一个对象.但是我需要为多个对象设置它.这可能吗?谢谢
有没有办法在silverlight中进行"点击编辑"控制?我有一些项目将显示在树视图控件中,我希望标签可以直接在树视图中编辑.
有人知道怎么做吗?
Eclipse当前显示// TODO所有打开项目的任务标记().如果有人能够指出偏好,我可能会限制显示的任务范围(例如,只有当前项目的任务),我将不胜感激.
我的数据库有一个父表,其中包含一个自动递增的主键标识"ID"和一个普通的"TIMESTAMP列".我有一个带有外键的子表,它引用了父'ID'列.
我想编写一个存储过程,将新列插入父数据库和子数据库.如何将子ID'列设置为等于新的自动递增父ID'列?这是否需要单独的:
SELECT TOP 1 * FROM PARENT_TABLE
Run Code Online (Sandbox Code Playgroud)
或者还有另一种方式吗?
我有一个以a表示的数据对象TreeModel,我只想在我的节目中显示它的一部分JTree- 为了争论,说叶子和他们的父母.如何隐藏/过滤不必要的节点?
我有一个IE6绝对位置div,我想要全屏(100%宽度和高度).当数据加载到页面上时,它被用作"加载,请稍候"消息.
似乎ie6不识别css "height:100%".
有什么工作吗?
所以,我对网站有了一个想法.我可以开始使用我想要的任何平台和框架,但是有太多的选择.
OS平台:Windows,*nix
Web框架:Rails,ASP.NET,ASP.NET MVC,Django,Zend,Cake,其他
托管:EC2,专用服务器,共享主机,VPS,App引擎,Azure,其他
持久性:S3,MySql,PostreSql,Sql Server,SimpleDB,CouchDB,其他
你如何避免决策瘫痪并开始?
BlockingQueue有一个名为drainTo()的方法,但它没有被阻止.我需要一个我想阻止的队列,但也能够在一个方法中检索排队的对象.
Object first = blockingQueue.take();
if ( blockingQueue.size() > 0 )
blockingQueue.drainTo( list );
Run Code Online (Sandbox Code Playgroud)
我想上面的代码会起作用,但我正在寻找一个优雅的解决方案.
java ×3
c# ×1
concurrency ×1
containers ×1
css ×1
database ×1
detect ×1
eager ×1
eclipse ×1
fetch ×1
java-ee ×1
jboss ×1
jtree ×1
linq ×1
nhibernate ×1
silverlight ×1
sql ×1
sql-server ×1
swing ×1
wpf ×1
xaml ×1