覆盖Rails ActiveRecord销毁行为的最佳方法是什么?

我有一个应用程序,我想覆盖我的许多模型的销毁行为。 用例是用户可能有合法需要删除特定记录,但实际上从数据库中删除该行会破坏影响其他相关模型的参照完整性。 例如,系统的用户可能想要删除与他们不再开展业务的客户,但需要维护与该客户的交易。 看来我至少有两个选择: 将数据复制到必要模型中,有效地使我的数据模型非规范化,以便删除的记录不会影响相关数据。 覆盖ActiveRecord的“销毁”行为,例如设置一个标志,指示用户“删除”记录并使用此标志隐藏记录。 我错过了更好的方法吗? 选项1对我来说似乎是一个可怕的想法,尽管我很想听到相反的论点。 选项2似乎有些Rails-ish但我想知道处理它的最佳方法。 我应该创建自己的inheritance自ActiveRecord :: Base的父类,重写那里的destroy方法,然后在我想要这种行为的模型中inheritance该类吗? 我是否还应该覆盖查找器行为,因此默认情况下不会返回标记为已删除的记录? 如果我这样做,我将如何处理动态查找器? 命名范围怎么样?

当你说Ruby是反思的时候,这主要是指“鸭子打字”吗?

我正在阅读描述Ruby的文本,它说: Ruby被认为是一种“反思”语言,因为Ruby程序可以分析自身(就其构成而言),调整其工作方式,甚至用其他代码覆盖自己的代码。 我对这个术语“反思”感到困惑 – 这主要是谈论Ruby可以查看变量并弄清楚它是Integer还是String(duck typing)的方式,例如: x = 3 x = “three” # Ruby reassigns x to a String type

为什么我的rails命令总是创建一个新的应用程序?

请原谅我,因为我对轨道上的* nix和ruby都是新手。 我的rails命令总是创建一个新的应用程序,我无法弄清楚原因。 运行“rails new myApp”将在当前目录中生成名为“new”的新rails应用程序。 同样,“rails server”只是在名为“server”的文件夹中创建一个新应用程序。 有任何想法吗? 我正在使用Ubuntu 11.04和rails 3.0.9。

如何在ruby回溯中获取源和变量值?

这是典型的Ruby on Rails回溯的最后几帧: 应用程序跟踪http://img444.imageshack.us/img444/8990/rails-lastfew.png 以下是Python中典型的Nevow追溯的最后几帧: 替代文字http://img444.imageshack.us/img444/9173/nw-lastfew.png 它不仅仅是网络环境,你可以在ipython和irb之间进行类似的比较。 如何在Ruby中获得更多这类细节?

Rails错误resource_name – 设计帮助路由和呈现

我正在尝试渲染Devise gem的登录视图,但是我收到一个错误,下面是我目前的代码: 这是我的views/users/shared/_links.html.erb : 我的config/routes.rb : Densidste::Application.routes.draw do match ‘user/edit’ => ‘users#edit’, :as => :edit_current_user match ‘signup’ => ‘devise/users#new’, :as => :signup match ‘logout’ => ‘devise/sessions#destroy’, :as => :logout devise_for :users do get “login”, :to => “devise/sessions#new” end resources :sessions resources :users devise_for :users resources :aktivs resources :taggingposts resources :tags resources :kommentares resources :posts # […]

如何动态地向I18n添加值?

我的rails应用程序中有很多ymls,我想将其中一些用于其他服务,以便我可以从多个地方调用它。 这个调用的响应将是一个哈希。 {“en” : {“test” : {“text1” : “hi english”}, {“text2” : “mambo number %{num}”} }, “es” : {“test” : {“text1” : “hi espaniol”}, {“text2” : “mamboes numeros %{num}”} } } 有没有办法可以将这个哈希加载到I18n翻译中 I18n.add_translations(some_hash) 所以我可以访问它们 I18n.t(“test.text1”) I18n.t(“test.text2”, :num => 5) 我怎么能实现它?

Ruby / Rails中的整数序列化

我正在寻找一种方法来处理Ruby / Rails中的整数序数化,即。 “st”,“nd”,“rd”和“th”后缀为整数。 Ruby on Rails用于使用“ordinalize”方法扩展FixNum,但该function似乎已在版本3中弃用。 我目前只是使用旧Rails方法的源代码,这很好……但这似乎是大多数脚本语言/ Web框架内置的function,我觉得Rails背后的人必须有一个理由弃用function(也许它现在可以在Ruby中使用了吗?)。 请指教!

是否可以从Thor脚本中调用Git或其他命令行工具?

我发现在为我的Rails 3应用程序进行git提交之前和之后,我经常运行一系列例行的“清理”任务。 我正在考虑把这些东西放到Thor脚本中,但有一点我无法弄清楚是如何使用Thor(或Rake)来调用系统上的其他工具。 是否可以从Thor或Rake脚本中调用git log这样的命令,如果是这样,那是什么样的? 谢谢!

如何按键按字母顺序对Ruby Hash进行排序

我试图按键按字母顺序排序哈希,但我似乎无法找到一种方法来创建自己的排序类。 我发现下面的代码按值排序,如果它是一个整数,我试图修改它,但没有任何运气。 temp[“ninjas”]=36 temp[“pirates”]=12 temp[“cheese”]=222 temp.sort_by { |key, val| key } 我的目标是按键排序Hash然后输出值。 我将不得不使用不同的哈希顺序多次执行此操作,但值相同。

Ruby中是否有一个包实现?

是否有一个袋子集合的实现(一个像集合一样的集合,可以计算一个对象插入的次数)?