小编Soo*_*uNe的帖子

存储第三方服务的密码

我的应用程序是ruby-on-rails,但我希望这个问题的任何答案都可能与框架无关.

我的应用程序使用rails ActionMailers a-la通过gmail SMTP发送电子邮件:

mail = MyActionMailerSubclass.setup_email

options = { :address          => "smtp.gmail.com",
        :port                 => 587,
        :domain               => 'mydomain.com',
        :user_name            => 'myuser@mydomain.com',
        :password             => 's3cur3p@s$w0rd',
        :authentication       => 'plain',
        :enable_starttls_auto => true  }

mail.delivery_method :smtp, options
mail.deliver
Run Code Online (Sandbox Code Playgroud)

好的,那很好......我的应用程序代码中的纯文本密码是gq.或者我可以用纯文本将其存储在数据库中.显然两者都是不可接受的.

Salting和hashing,通常的技术不会在这里工作,因为我需要将密码发送到gmail.

那么,为第三方服务保护密码有哪些策略?

最终用户名和密码甚至不属于我,它们将属于应用程序最终用户.

security encryption ruby-on-rails ruby-on-rails-3

8
推荐指数
1
解决办法
842
查看次数

Rails测试默认请求主机

我希望我的所有单元测试都使用www.test.host而不是默认值test.host.

我尝试过ENV['HTTP_HOST']进入config/environments/test.rb,但是没有得到它.

我的目的是避免在我的控制器测试中重定向,在我的测试中检查response对象的输出是:

#<ActionController::TestResponse:0x000001059ed378, ..., @header={"Location"=>"http://www.test.host", ... , @status=301, @body=["<html><body>You are being <a href=\"http://www.test.host\">redirected</a>.</body></html>"], ... , "REQUEST_METHOD"=>"GET", "SERVER_NAME"=>"example.org", "SERVER_PORT"=>"80",... , "HTTP_HOST"=>"test.host", "REMOTE_ADDR"=>"0.0.0.0" ...>>
Run Code Online (Sandbox Code Playgroud)

如果它有所作为,我正在使用Rails3和RSPEC2

unit-testing rspec ruby-on-rails

8
推荐指数
1
解决办法
3455
查看次数

JavaScript图形遍历库

我想建议一个好的javascript库来操作图形/网络.我对可视化不感兴趣,只是寻找最短的路径和跨越树木.

我看过乌鸦,看起来很不错,但是面向对象.

一个功能模型,如underscore.js是我的偏好,但不是一个要求.

javascript graph-traversal

8
推荐指数
0
解决办法
1852
查看次数

当子查询可以为NULL时,SQL"IN子查询"

我有一个查询需要返回子查询中不匹配的结果.子查询可以返回一个空结果,所以如果子查询返回一个空集来防止IN (NULL)哪个总是返回另一个NULL ,我需要设置一个默认值(比如说0).

例如

SELECT * FROM example_table WHERE id NOT IN (subquery_that_selects_ids)
Run Code Online (Sandbox Code Playgroud)

subquery_that_selects_ids 如果子查询找不到匹配的结果,则可以返回一组整数,即(1,2,5,6)或空集.

COALESCE 在这里不起作用,因为子查询可能会返回多个结果.

解决方案需要在SQLite或postgresql中工作.如何防止子查询返回空集?


每个人都在告诉我查询应该按照书面形式工作.你们都是正确的.该查询是由Rails3的AREL构建的,因为我在这里发布了完整的查询,我注意到AREL在使用数组条件时将NULL置于空集中.

IE我在rails中的查询看起来像:

Object.where("id NOT IN (?)", Object.where(other_conditions).select(:id))
Run Code Online (Sandbox Code Playgroud)

Object.where(other_conditions)评价为[]所述?正在取代NULL

所以我重新编写查询看起来像:

Object.where("id NOT IN (" + Object.where(other_conditions).select(:id).to_sql + ")")
Run Code Online (Sandbox Code Playgroud)

问题解决了.

我赞扬@Michael Buen,但也支持任何告诉我查询将按照书面形式工作的人,因为他们是正确的.特别感谢@OMG小马和@Ted Elliott!

sql sqlite postgresql ruby-on-rails arel

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

Rails Basecamp样式子域最佳实践

我的目标是为每个子域分别设置用户帐户.在任何情况下我都不想在子域之间进行异花授粉.

我已经看过Robby RussleDHH的想法(两者都是前Rails3).

控制器处理非常简单,我的问题是关于保持模型数据的分离.阻止user1查看user2数据的最佳方法是什么?

一些想法可能包括:

  1. subdomain_id为每个模型添加外键 - Advantage,简单的一对多关系可用于将每个模型范围限定为子域.- 缺点,这是数据和较大的应用程序逻辑之间非常紧密的耦合,这似乎是不合适的.

  2. One-to-many :through对于将其与子域相关联的每个模型 - Advantage,无需将subdomain_id外键列添加到将它们与其子域相关联的现有表中.- 缺点,我的直觉是,这是有点矫枉过正.多个连接查询可能会变得复杂,并且可能发生交叉传播错误.

  3. 每个子域的单独应用程序或数据库 - 优势,数据完全隔离.- 缺点是,需要管理/更新/保护/托管等大量单个应用程序/数据库.

  4. 你的想法?

ruby-on-rails multi-tenant ruby-on-rails-3

7
推荐指数
2
解决办法
3533
查看次数

rails 3内置rake任务,它们位于何处?

我可以将自定义rake任务放入lib/tasks/,但内置的(即db:migrate,db:seed等)存储在哪里?

我看了看:[INSTALLATION_DIRECTORY]/gems/rails-[VERSION]/lib/tasks但找不到那条路.也许重要的是我正在使用RVM?

我想检查他们的来源以获得一些灵感.

ruby-on-rails rake-task ruby-on-rails-3

7
推荐指数
1
解决办法
1554
查看次数

将UIViews子视图展平为UIImage iPhone 3.0

我有一个UIView,它有几个UIImageViews作为子视图.这些子视图中的每一个都应用了不同的仿射变换.我想采取相当于我的UIView的屏幕截图,将其捕获为UIImage或其他图像表示.

我已经尝试过的方法,将图层渲染为CGContext:

[view.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)

不保留我的子视图的定位或其他仿射变换.

我真的很感激正确的方向踢.

iphone cocoa-touch cgcontext

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

rails 3 has_many:通过记录保存错误

我不确定我的问题是什么,所以这个问题可能需要更多的澄清,但这里似乎是最相关的:

我有一个has_many :through和连接模型有一些不是外键的字段.当我构建模型并尝试保存时,我从连接模型的非外键字段获得验证错误.

我的文件看起来像:

Person.rb

  has_many :wedding_assignments, :dependent => :destroy
  has_many :weddings, :through=>:wedding_assignments
  accepts_nested_attributes_for :weddings
  accepts_nested_attributes_for :wedding_assignments

Wedding.rb

  has_many :wedding_assignments, :dependent => :destroy
  has_many :people, :through=>:wedding_assignments
  accepts_nested_attributes_for :people
  accepts_nested_attributes_for :wedding_assignments

WeddingAssignment.rb

  belongs_to :person
  belongs_to :wedding
  validates_presence_of :role, :person, :wedding
Run Code Online (Sandbox Code Playgroud)

(角色是一个字符串)

people_controller.rb

  def new
    @person = Person.new

    1.times do
      wedding = @person.weddings.build
      1.times do
        assignment = wedding.wedding_assignments.build
        assignment.person = @person
        assignment.wedding = wedding
      end
    end
  end

  def create
    @person = Person.new(params[:person])
    @person.weddings.each do |wedding|
      wedding.wedding_assignments.each do |assignment|
        assignment.person = …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails has-many-through ruby-on-rails-3

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

jQuery就绪函数别名

关于创建新jQuery对象的所有不同方法,我有点困惑.

相关的文档似乎是:http : //api.jquery.com/ready/ http://api.jquery.com/jQuery/

从这两个文档中,以下都是等效的(除了别名或没有别名'$'):

  • $(文件).就绪(句柄)
  • $().就绪(句柄)
  • $(句柄)
  • jQuery(function($){});
  • jQuery(document).ready(function($){});

那是对的吗?我错过了吗?

jquery alias document-ready

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

Ruby 1.9中的动态变量范围

我对在Ruby中使用动态(而不是词法)范围变量感兴趣.

似乎没有直接的内置方式,就像let在Lisp中一样.Christian Neukirchen建议了一种可能的方法来做动态范围变量.他在Dynamic班上创建了"线程局部哈希" .我对此并不太疯狂.

然后我记得Ruby 1.9有一个tap方法.我看到很多人tap用来在一系列命令中打印调试值.我认为它可以用来非常好地模仿动态范围的变量.

下面是一个例子,其中一个人想要使用动态范围变量,以及使用的解决方案tap.

如果我有一个博客发布这个,并获得一些反馈,我会在那里做.相反,我来S/O批评这个想法.发表你的批评,我将给出最赞成的人的正确答案.


情况

您有一个ActiveRecord对象代表Account每个帐户has_many Transaction.A Transaction有两个属性:

  • description
  • amount

你想找到所有的总和transactionsaccount,牢记amount可以是nilFloat(不,你不能批评这一点).

你的第一个想法是:

def account_value
  transactions.inject(0){|acum, t| acum += t.amount}
end
Run Code Online (Sandbox Code Playgroud)

这是你第一次没有金额时的炸弹:

TypeError: nil can't be coerced into Fixnum
Run Code Online (Sandbox Code Playgroud)

清洁解决方案

使用tap暂时定义amount = 0.我们只希望这是暂时的,以防我们忘记将其设置回来并保存transaction0值仍然存在.

def account_value
  transactions.inject(0){|acm, t| t.amount.tap{|amount| amount ||=0; acm+=amount}; acm}
end
Run Code Online (Sandbox Code Playgroud)

由于零到零的分配 …

ruby lisp scope ruby-on-rails tap

6
推荐指数
2
解决办法
1936
查看次数