ActiveRecord::Base有一个很大的API'API,有多种方法可以查找和保存对象.例如,您的AR::B对象可能已经从多种方法实例化:
Foo.new(…)Foo.create(…)Foo.find(…)Foo.find_by_sql(…)Foo.find_[all_]by_*(…)bar.foos (协会)
同样,有问题的对象可能会被一些不同的方法持久化:
foo.create 要么 foo.create!foo.save 要么 foo.save!foo.update_attributes 要么 foo.update_attributes!现在,在编写单元测试时,最好将存根外部方法调用存根,以便您的测试可以专注于相关方法的业务逻辑.但是,当涉及到处理AR::B对象时 - 例如在控制器单元测试中 - 似乎你必须提交上述方法之一,实际上就方法的业务逻辑而言,它不应该是重要的你选择哪个.
你是否必须将你的方法的行为与它的实现紧密结合在一起,还是我错过了一些简单的东西?
我想知道创建预推钩(在git repo中)的最佳方法是什么,它执行以下操作:
如何在Rails中实现PRG?
我在Rails中使用了PRG,但我并不完全相信它是正确的.我想知道在Rails中有没有更好的方法来处理它?
我的网站顶部有我的Twitter个人资料,但我想知道是否有办法过滤掉我的@replies,只显示我的状态更新?
谢谢
我知道我可以rand通过调用srand种子"重新启动"我的调用,但这肯定会影响rand其他库方法的未来调用,包括加密方法?
如何在某些地方重复我的随机性并仍然确保我的其余代码不受影响?
我有一些问题,测试StateMachine以s Factory Girl.它看起来像是Factory Girl初始化对象的方式.
我错过了什么,或者这不是应该的那么容易吗?
class Car < ActiveRecord::Base
attr_accessor :stolen # This would be an ActiveRecord attribute
state_machine :initial => lambda { |object| object.stolen ? :moving : :parked } do
state :parked, :moving
end
end
Factory.define :car do |f|
end
Run Code Online (Sandbox Code Playgroud)
因此,初始状态取决于stolen在初始化期间是否设置了属性.这似乎工作正常,因为ActiveRecord将属性设置为其初始化程序的一部分:
Car.new(:stolen => true)
## Broadly equivalent to
car = Car.new do |c|
c.attributes = {:stolen => true}
end
car.initialize_state # StateMachine calls this at the end of the main initializer
assert_equal car.state, 'moving' …Run Code Online (Sandbox Code Playgroud) testing activerecord ruby-on-rails state-machine factory-bot
我知道你可以在Rails中创建命名范围,它允许你指定可以在以后构建的条件:
named_scope :active, :conditions => {:active => true}
...
MyModel.active.find(...)
Run Code Online (Sandbox Code Playgroud)
这通过创建一个代理对象来工作,该代理对象直到稍后才进行评估.我想知道的是,是否可以创建一个动态的未命名范围?
我的意思是,有一种方法'foo'我可以去
scope = MyModel.foo(:conditions => {:target_id => 4})
Run Code Online (Sandbox Code Playgroud)
然后scope作为代理对象传递,我可以做更多的.finds或其他范围的调用?
我的Rails应用程序中有一个模块,它位于/ lib中
module MyModule
mattr_accessor :the_variable
class << self
def setup
yield this
end
end
end
Run Code Online (Sandbox Code Playgroud)
从我的environments/#{RAILS_ENV}.rb文件中,我可以为以下内容设置特定于环境的值the_variable:
MyModule.setup do |my_module_config|
my_module_config.the_variable = 42
end
Run Code Online (Sandbox Code Playgroud)
这很可爱,似乎工作(几乎)很好.
问题是在开发模式下,Rails通过ActiveSupport::Dependencies卸载一大堆模块,并及时为新请求重新加载它们.这通常是一个很好的行为,因为这意味着您在进行代码更改时不需要重新启动localhost服务器.
但是,这也清除了我的初始化the_variable变量,当下一个请求进入初始化时(显然)不会再次运行.最终结果是后续请求最终MyModule.the_variable设置为nil而不是42我正在寻找的请求.
我试图找出如何在请求结束时停止Rails卸载我的模块,或者找到另一种方法来干净地为我的模块提供特定于环境的配置.
有任何想法吗?: - /
我需要在页面中显示一个列表,比方说,人物的属性应该或多或少地呈现如下:
名称: 姓名
日期: 1/1/2000
其他:其他
阅读他们说的文件:
LABEL元素可用于将信息附加到控件.
那么,它是否包含名称,日期等属性的名称是正确的标记...即使没有<input>要关联的属性?
activerecord ×2
html ×2
ruby ×2
dependencies ×1
factory-bot ×1
forms ×1
git ×1
hook ×1
html5 ×1
json ×1
label ×1
named-scope ×1
random ×1
reloadable ×1
srand ×1
stubbing ×1
testing ×1
twitter ×1
unit-testing ×1