我的应用程序是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.
那么,为第三方服务保护密码有哪些策略?
最终用户名和密码甚至不属于我,它们将属于应用程序最终用户.
我希望我的所有单元测试都使用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
我想建议一个好的javascript库来操作图形/网络.我对可视化不感兴趣,只是寻找最短的路径和跨越树木.
我看过乌鸦,看起来很不错,但是面向对象.
一个功能模型,如underscore.js是我的偏好,但不是一个要求.
我有一个查询需要返回子查询中不匹配的结果.子查询可以返回一个空结果,所以如果子查询返回一个空集来防止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!
我的目标是为每个子域分别设置用户帐户.在任何情况下我都不想在子域之间进行异花授粉.
我已经看过Robby Russle和DHH的想法(两者都是前Rails3).
控制器处理非常简单,我的问题是关于保持模型数据的分离.阻止user1查看user2数据的最佳方法是什么?
一些想法可能包括:
subdomain_id为每个模型添加外键 - Advantage,简单的一对多关系可用于将每个模型范围限定为子域.- 缺点,这是数据和较大的应用程序逻辑之间非常紧密的耦合,这似乎是不合适的.
One-to-many :through对于将其与子域相关联的每个模型 - Advantage,无需将subdomain_id外键列添加到将它们与其子域相关联的现有表中.- 缺点,我的直觉是,这是有点矫枉过正.多个连接查询可能会变得复杂,并且可能发生交叉传播错误.
每个子域的单独应用程序或数据库 - 优势,数据完全隔离.- 缺点是,需要管理/更新/保护/托管等大量单个应用程序/数据库.
你的想法?
我可以将自定义rake任务放入lib/tasks/,但内置的(即db:migrate,db:seed等)存储在哪里?
我看了看:[INSTALLATION_DIRECTORY]/gems/rails-[VERSION]/lib/tasks但找不到那条路.也许重要的是我正在使用RVM?
我想检查他们的来源以获得一些灵感.
我有一个UIView,它有几个UIImageViews作为子视图.这些子视图中的每一个都应用了不同的仿射变换.我想采取相当于我的UIView的屏幕截图,将其捕获为UIImage或其他图像表示.
我已经尝试过的方法,将图层渲染为CGContext:
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)
不保留我的子视图的定位或其他仿射变换.
我真的很感激正确的方向踢.
我不确定我的问题是什么,所以这个问题可能需要更多的澄清,但这里似乎是最相关的:
我有一个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) 关于创建新jQuery对象的所有不同方法,我有点困惑.
相关的文档似乎是:http : //api.jquery.com/ready/ http://api.jquery.com/jQuery/
从这两个文档中,以下都是等效的(除了别名或没有别名'$'):
那是对的吗?我错过了吗?
我对在Ruby中使用动态(而不是词法)范围变量感兴趣.
似乎没有直接的内置方式,就像let在Lisp中一样.Christian Neukirchen建议了一种可能的方法来做动态范围变量.他在Dynamic班上创建了"线程局部哈希" .我对此并不太疯狂.
然后我记得Ruby 1.9有一个tap方法.我看到很多人tap用来在一系列命令中打印调试值.我认为它可以用来非常好地模仿动态范围的变量.
下面是一个例子,其中一个人想要使用动态范围变量,以及使用的解决方案tap.
如果我有一个博客发布这个,并获得一些反馈,我会在那里做.相反,我来S/O批评这个想法.发表你的批评,我将给出最赞成的人的正确答案.
您有一个ActiveRecord对象代表Account每个帐户has_many Transaction.A Transaction有两个属性:
descriptionamount你想找到所有的总和transactions上account,牢记amount可以是nil或Float(不,你不能批评这一点).
你的第一个想法是:
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)
由于零到零的分配 …
alias ×1
arel ×1
cgcontext ×1
cocoa-touch ×1
encryption ×1
iphone ×1
javascript ×1
jquery ×1
lisp ×1
multi-tenant ×1
postgresql ×1
rake-task ×1
rspec ×1
ruby ×1
scope ×1
security ×1
sql ×1
sqlite ×1
tap ×1
unit-testing ×1