小编Der*_*ley的帖子

Rails:你在哪里放置非模型代码?

我是Rails的新手,并且正在学习Rails 3的侧面项目.有时我想编写一些不属于我的模型或我的控制器的代码 - 与模型和/或控制器相关的问题,但我不想将其中任何一个与实现细节混为一谈我在写什么

例如:我正在构建的项目使用Janrain的授权系统(RPX),因此我可以获得oauth,openid,google等授权.他们提供了很多很好的API代码,所以我不必自己编写.此代码不属于登录控制器或用户模块.它是授权代码,因此登录控制器需要访问它,但它不是该控制器的一部分.

你把这个代码放在哪里?它不是型号代码.它不属于控制器.

... 提前致谢.

ruby-on-rails organization

6
推荐指数
1
解决办法
1062
查看次数

Rails中的日期验证3

我有一个Rails 3应用程序(使用Mongodb和Mongoid,如果这有所不同),并且在我的一个模型中,我有一个字段定义为日期类型.

class Participant
  include Mongoid::Document

  field :birth_date, :type => Date
end
Run Code Online (Sandbox Code Playgroud)

我的控制器正在使用mongo的find_or_initialize_by功能:

class ParticipantController

  def create
    @participant = Participant.find_or_initialize_by(params[:participant])
    if @participant.save
      redirect_to participants_path
    else
      render :new
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

所有这些归结为:如何使用Mongoid和Rails 3在ActiveModel中进行日期验证?

我想确保在文本框中输入"blah"时不会在分配给.birth_date我的模型字段时引发异常.它应该提供一个很好的验证错误消息,而不使用控制器来进行验证.

这是基本要求:

  • 视图必须是单个文本框.没有其他的.这是我们无法更改的用户要求

  • 验证应该在模型中完成,而不是在控制器或
    视图中(javascript或其他)

  • 没有正则表达式格式验证(它们无法正常工作/支持区域设置等)

问题是文本框中的值被分配给.birth_datebefore validates_format_of并运行validates_presence_of.所以...

如何拦截值的赋值,以便在分配之前对其进行验证?是否可以使用ActiveModel在模型中执行此操作?或者这是否要求我在控制器中放置代码来执行此操作?

validation date mongodb ruby-on-rails-3

6
推荐指数
1
解决办法
1万
查看次数

如何从Rails通知中访问current_user?

我正在构建一个审计跟踪,需要知道哪个用户当前正在发出请求.我的审计跟踪是使用ActiveSupport :: Notifications构建的,以接收需要审计的偶数.

我想要做的是使用ActiveSupport :: Concern封装逻辑以满足我的审计需求,这样我就可以轻松地将审计添加到我系统中的任何模型中.

一般来说,这很容易做到.我甚至在一段时间后发表了博客.但是,我很难弄清楚如何让当前用户向Web服务器发出请求,以便我可以记录谁在审计跟踪中进行了哪些更改.

我知道有很多关于"如何在我的模型中获得current_user"的问题,但我并不是要求在模型中进行,所以我希望有更好的答案.由于我的审计代码与基础架构相关,我希望有一些方法可以利用当前正在处理的请求,或者其他可以明确告诉我当前登录/发出请求的内容.

我已经阅读了许多说"使用线程存储并将current_user放在那里"的"答案".我不喜欢这个答案,因为其他人没有这个原因 - 不能保证线程存储是安全的.如果服务器使用相同的线程来处理多个请求等,它可能会导致多个请求流失.

所以...鉴于我不是试图从我的模型中访问current_user,而是从ActiveSupport :: Concern或ActiveSupport :: Notifications事件订阅中获取,有什么好的选择让我知道当前用户是谁?

更新

我正在使用设计进行身份验证,后端使用Warden.设计通过调用检索current_user request.env['warden'].authenticate(:scope => :user)(假设我使用"用户"模型进行身份验证).

我有办法request从我的关注或通知订阅中访问当前对象吗?回到我的.NET时代,我本来可以打电话HttpContext.Current.Request,一切都会好的.Rails中的等价物是什么?

security notifications audit-trail ruby-on-rails-3

6
推荐指数
1
解决办法
761
查看次数

ruby:如果丢失则安装gem的代码

是否有一些ruby代码我可以用来从本地文件安装gem,如果没有安装gem?

我认为它看起来像:

if !gem_installed("some gem name")
  system "gem install -l local_copy.gem"
end
Run Code Online (Sandbox Code Playgroud)

我不知道是否存在让我检查这样的宝石的东西......

ruby rubygems

5
推荐指数
1
解决办法
3951
查看次数

Hudson:我如何使用参数化构建来执行svn checkout和svn标记?

我正在hudson v1.362中设置参数化构建.我正在创建的参数用于确定在subversion中结帐的分支.

我可以像这样设置我的svn存储库URL:https://my.svn.server/branches/${branch}它可以完成结帐和构建.

现在我想在构建完成后标记它.我正在使用hudson的SVN标记插件来执行此操作.所以我转到hudson项目的项目配置屏幕的底部,然后打开"在成功构建时执行Subversion标记".

在这里,我设置了我的Tag Base URL https://my.svn.server/tags/${branch}-${BUILD_NUMBER},它给了我关于那些未找到的属性的错误.所以我将它们更改为这样的环境变量用法:https://my.svn.server/tags/${env['branch']}-${env['BUILD_NUMBER']}并且svn标记插件很高兴.

现在的问题是我顶部的svn存储库使用了${branch}语法和svn标记插件barfs:

moduleLocation: Remote ->https://my.svn.server/branches/$branch/
Tag Base URL: 'https://my.svn.server/tags/thebranchiused-1234'.
There was no old tag at https://my.svn.server/tags/thebranchiused-1234.
ERROR: Publisher hudson.plugins.svn_tag.SvnTagPublisher aborted due to exception
java.lang.NullPointerException
    at hudson.plugins.svn_tag.SvnTagPlugin.perform(SvnTagPlugin.java:180)
    at hudson.plugins.svn_tag.SvnTagPublisher.perform(SvnTagPublisher.java:79)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:36)
    at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:601)
    at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:580)
    at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:558)
    at hudson.model.Build$RunnerImpl.cleanUp(Build.java:167)
    at hudson.model.Run.run(Run.java:1295)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:124)
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)

注意第一行,那里:svn标签正在查看$ {branch}作为存储库url的一部分...它没有解析出属性值.

我试图更改svn的原始存储库URL以使用${env['branch']}语法,但这会破坏原始结帐,因为结帐时根本不会解析此语法.

救命?!

我如何使用参数化构建来设置结帐的svn url和标记我的构建?!

svn tags hudson build parameterized

5
推荐指数
1
解决办法
6684
查看次数

在Amazon S3中,我需要什么权限才能在对象上获取HEAD?

我正试图把HEAD放在一个物体上,而我却被禁止了403.为了使用REST API获取对象的HEAD,我需要具有哪些权限?

我有代码使用签名的URL来获取完整的对象内容...但当我切换到获取HEAD而不是获取完整的对象时,它给了我403禁止

security permissions amazon-s3 head amazon-web-services

5
推荐指数
1
解决办法
2393
查看次数

带有nodejs child_process的ssh,在服务器上找不到命令

我试图通过nodejs child_process运行一个简单的ssh命令.当我通过nodejs代码运行命令时,它无法说我找不到发送到服务器的命令.当我运行相同的命令只是复制和粘贴到我的终端窗口,它运行正常.

这是我正在尝试做的命令行版本:

ssh user@example.com 'ls -lai'
Run Code Online (Sandbox Code Playgroud)

这是使用child_process的同一个ssh命令的nodejs版本

var cproc = require('child_process');
var exec = cproc.exec;
var spawn = cproc.spawn;

var command = "ssh";
var args = ["user@example.com", "'ls -lai'"];

var child = spawn(command, args);

child.stdout.on('data', function(data) {
  console.log('stdout: ' + data);
});

child.stderr.on('data', function(data) {
  console.log('stderr: ' + data);
});

child.on('close', function(code) {
  console.log('exit code: ' + code);
  process.exit();
});
Run Code Online (Sandbox Code Playgroud)

命令行版本的输出正是我所期望的...我得到目录列表.但是当我运行这个nodejs代码来执行相同的命令时,stderr回调代码启动,命令返回代码127(找不到命令).

$ node test-ssh.js 
stderr: bash: ls -lai: command not found

exit code: 127
Run Code Online (Sandbox Code Playgroud)

根据这里的输出,找不到'ls -lai'命令......但这没有意义,因为当我从终端提示符直接运行它时它完全正常.

有谁知道为什么通过nodejs运行ssh会导致这种情况发生?

ssh bash child-process node.js

5
推荐指数
1
解决办法
2888
查看次数

MongooseJS“versionKey”(__v 字段)是“矢量时钟”吗?

我已经使用 MongooseJSrevisionKey有一段时间了 -__v默认情况下,它包含在文档中的字段。我明白修订号的目的是什么,通常是什么时候更新。

我最近和一位朋友谈论了“矢量时钟”的想法,我提到了 MongoDB 和 MongooseJS 有这个__v领域。当时,听起来这可能是一个矢量时钟。但是在阅读了一些关于矢量时钟的内容后,现在我不确定。

所以我想知道:versionKeyMongooseJS的属性,以及__v它默认产生的字段,可以被认为是一个向量时钟吗?是或否,为什么?

theory mongoose mongodb vector-clock

5
推荐指数
1
解决办法
1182
查看次数

如何使用XmlAttributeOverrides覆盖集合元素的xml元素名称?

我有一个非常基本的对象对象模型,由System.Xml.XmlSerialization东西序列化.我需要使用XmlAttributeOverrides功能为子元素集合设置xml元素名称.

public class Foo{
  public List Bars {get; set; }
}

public class Bar {
  public string Widget {get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用标准的xml序列化程序,这将成为

 <Foo>
  <Bars>
    <Bar>...</Bar>
  </Bars>
 </Foo>
Run Code Online (Sandbox Code Playgroud)

我需要使用XmlOverrideAttributes来说明这一点

 <Foo>
  <Bars>
    <SomethingElse>...</SomethingElse>
  </Bars>
 </Foo>
Run Code Online (Sandbox Code Playgroud)

但我似乎无法让它重命名集合中的子元素...我可以重命名集合本身...我可以重命名根...不知道我做错了什么.

这是我现在的代码:

XmlAttributeOverrides xOver = new XmlAttributeOverrides();

var bars = new XmlElementAttribute("SomethingElse", typeof(Bar));
var elementNames = new XmlAttributes();
elementNames.XmlElements.Add(bars);
xOver.Add(typeof(List), "Bars", elementNames);

StringBuilder stringBuilder = new StringBuilder();
StringWriter writer = new StringWriter(stringBuilder);
XmlSerializer serializer = new XmlSerializer(typeof(Foo), xOver);
serializer.Serialize(writer, someFooInstance);

string xml = stringBuilder.ToString(); …
Run Code Online (Sandbox Code Playgroud)

c# overriding xml-serialization

3
推荐指数
1
解决办法
9459
查看次数

Backbone Marionette onBeforeClose和过渡

我从昨天开始就是Backbone Marionette的新手,我想知道是否有人试图在视图之间实现一些奇特的转换.

实际上,我想在渲染下一个视图之前淡出当前视图.我在onBeforeClose回调中执行此操作,但这不能正常工作,因为在我当前视图完成转换之前,下一个视图渲染...

有小费吗?

谢谢

javascript backbone.js marionette

3
推荐指数
1
解决办法
2501
查看次数