有十几个Rails插件,其目标是在测试中替换灯具.以下是我能想到的一些内容:
可能还有其他人.您更喜欢哪些插件?为什么?
我的发票模型有一个address_id属性,我不希望这个address_id更改为FOREVER.所以我不希望这发生在课外:
invoice.address_id = 1
invoice.address = some_address
Run Code Online (Sandbox Code Playgroud)
Rails会自动将此address_id属性从发票表添加到模型中,那么如何将此属性声明为private/protected?调用
attr_protected :address_id
Run Code Online (Sandbox Code Playgroud)
很可能不是解决方案,因为根据文档它只能防止大规模分配.
谢谢!
我有这个任务模型:
class Task < ActiveRecord::Base
acts_as_tree :order => 'sort_order'
end
Run Code Online (Sandbox Code Playgroud)
我有这个测试
class TaskTest < Test::Unit::TestCase
def setup
@root = create_root
end
def test_destroying_a_task_should_destroy_all_of_its_descendants
d1 = create_task(:parent_id => @root.id, :sort_order => 2)
d2 = create_task(:parent_id => d1.id, :sort_order => 3)
d3 = create_task(:parent_id => d2.id, :sort_order => 4)
d4 = create_task(:parent_id => d1.id, :sort_order => 5)
assert_equal 5, Task.count
d1.destroy
assert_equal @root, Task.find(:first)
assert_equal 1, Task.count
end
end
Run Code Online (Sandbox Code Playgroud)
测试成功:当我销毁d1时,它会破坏d1的所有后代.因此,在破坏之后只剩下根.
但是,在我向Task添加了before_save回调之后,此测试现在失败了.这是我添加到Task的代码:
before_save :update_descendants_if_necessary
def update_descendants_if_necessary
handle_parent_id_change if self.parent_id_changed?
return true
end
def …
Run Code Online (Sandbox Code Playgroud) 我希望能够在Rails中比较Dates和Times,而无需始终调用to_time或to_date方法.所以我写了下面的代码:
class Date
def ==(other)
if other.kind_of?(Time)
self.to_time == other
else
super(other)
end
end
end
Run Code Online (Sandbox Code Playgroud)
我知道有一种简单的方法可以写这个,这样我就可以为>,<,> =,<=和<=>做这个工作.但我忘记了:P有什么想法吗?