小编Zab*_*bba的帖子

如何在Rails 3中使用'after_initialize'?

UPDATE

我错误地检查了edgerails指南而不是当前正确的Rails 3指南(没有提到after_initialize).不确定为什么edgerails指南是"不正确的" - 我认为edgerails指南应该是最新的最新指南?

我要离开这个问题,以防万一有人来寻找同样的"问题".

宏观式呼叫after_initialize是要走的路.



应该after_initialize用作方法还是宏观式调用?

这有效,但给出了弃用警告:

def after_initialize
  logger.info "Called after_initialize"
end
Run Code Online (Sandbox Code Playgroud)

弃用警告:不推荐使用Base#after_initialize,请改用Base.after_initialize:方法.

这有效,并且没有警告:

after_initialize :do_this_after_initialize
def do_this_after_initialize
  logger.info "Called after_initialize"
end
Run Code Online (Sandbox Code Playgroud)

活动记录验证和回调指南10.4 after_initialize和after_find说:

...如果您尝试使用宏样式类方法注册after_initialize或after_find,它们将被忽略.此行为是由于性能原因,因为after_initialize和after_find都将为数据库中找到的每条记录调用,这大大减慢了查询...

那么这意味着宏方式的使用效率低于方法式方式?

(我指南错了,'cos代码为王:D)


另一个更新


一个提交这里从2011年1月28日表明,正确的方法是仍然使用宏风格的通话,而不是一个def after_initialize.

activerecord ruby-on-rails-3

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

如何在Ruby中做出理智的"设置差异"?

演示(我期待结果[3]):

[1,2] - [1,2,3] => []    # Hmm
[1,2,3] - [1,2] => [3]   # I see

a = [1,2].to_set   => #<Set: {1, 2}>
b = [1,2,3].to_set => #<Set: {1, 2, 3}>
a - b              => #<Set: {}>  WTF!
Run Code Online (Sandbox Code Playgroud)

和:

[1,2,9] - [1,2,3] => [9]  # Hmm. Would like [[9],[3]]
Run Code Online (Sandbox Code Playgroud)

无论输入顺序如何,如何执行真正的设定差异?

PS.另外,我需要为两个2000元素数组执行此操作.通常,数组#1的元素数量少于数组#2,但这不能保证.

ruby set-difference

18
推荐指数
1
解决办法
8674
查看次数

Delayed_job不执行perform方法但清空作业队列

我有一个新的rails 3应用程序,这是我的Gemfile:

source 'http://rubygems.org'
gem 'rails', '3.0.0' gem 'delayed_job'
gem 'sqlite3-ruby', :require => 'sqlite3'
Run Code Online (Sandbox Code Playgroud)

这是表示我想要排队的作业的类:

class Me < Struct.new(:something)
   def perform
     puts "Hello from me"
     logger.info "Hello from me"
     logger.debug "Hello from me"
     raise Exception.new   
   end
end
Run Code Online (Sandbox Code Playgroud)

从没有工作人员运行的控制台:

irb(main):002:0> Delayed::Job.enqueue Me.new(1)
=> #<Delayed::Backend::ActiveRecord::Job id: 7, priority: 0, attempts: 0, handler: "--- !ruby/struct:Me \nsomething: 1\n", last_error: nil, run_at: "2010-12-29 07:24:11", locked_at: nil, failed_at: nil, locked_by: nil, created_at: "2010-12-29 07:24:11", updated_at: "2010-12-29 07:24:11">
Run Code Online (Sandbox Code Playgroud)

就像我提到的:没有工人在运行:

irb(main):003:0> Delayed::Job.all
=> [#<Delayed::Backend::ActiveRecord::Job id: 7, priority: 0, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails delayed-job ruby-on-rails-3

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

如何将`:include`添加到default_scope?

搜索'net,我发现我应该使用:include,但这似乎不会改变生成的SQL查询:

def Post #model
  default_scope :order => 'created_at DESC', :include => :author
end
Run Code Online (Sandbox Code Playgroud)

无论有没有:include,SQL都是一样的(即它只从posts表中选择).

这样做的方法是什么?

ruby-on-rails-3

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

如何使用Devise登录/注销时设置cookie

我正在使用Devise for rails 3应用程序.对于页面缓存,我需要为登录/注销信息设置cookie.

使用Devise登录/注销时设置cookie的最简单方法是什么?我读了"如何自定义控制器"部分,但它似乎是很多工作.

ruby-on-rails devise

16
推荐指数
2
解决办法
9505
查看次数

当使用`average()`时,如何在AREL中使用`to_sql`?

我正在尝试从AREL获取SQL,但是在我使用的情况下它不起作用average(:stars):

这有效:

Review.where("reviewed_user_id = ?", self.reviewed_user_id).to_sql
#=> "SELECT `reviews`.* FROM `reviews` WHERE (reviewed_user_id = 3)"
Run Code Online (Sandbox Code Playgroud)

这导致NoMethodError:

Review.where("reviewed_user_id = ?", self.reviewed_user_id).average(:stars).to_sql
#=> undefined method `to_sql' for 3:Fixnum
Run Code Online (Sandbox Code Playgroud)

这意味着to_sql调用AREL的结果而不是AREL对象 - 但为什么呢?

如何获取生成的SQL?

activerecord ruby-on-rails-3

15
推荐指数
1
解决办法
7388
查看次数

14
推荐指数
1
解决办法
4888
查看次数

如何缩小HTML?

是否有一些工具(或Rails本身)可以缩小HTML(就像Jammit对CSS和JS文件所做的那样)?

其次,这里的最佳做法是什么,是否值得缩小html?(这是针对将要提供给手机的网站,因此减轻体重非常重要)

minify ruby-on-rails-3

14
推荐指数
2
解决办法
9628
查看次数

是否有任何示例Rails应用程序,其中业务逻辑保存在与ActiveRecord不同的类中?

最近,Ruby社区发布了博客文章,推文以及关于使用更好的OO设计的好处的评论,特别是将业务逻辑与持久性逻辑分离.特别是对于较大的应用,我认为这是一个很好的建议.

我有兴趣找到一个完整的示例Rails应用程序,其中业务逻辑与ORM(ActiveRecord或其他)完全分离.具体来说,我很有兴趣看到如何处理数据库约束,业务规则验证,参数清理,服务类等.

有人知道像这样的开源应用吗?

ruby architecture domain-driven-design model ruby-on-rails

14
推荐指数
1
解决办法
2293
查看次数

Rails - 在Rails控制台中,当你保存并弄错时,你怎么能找到原因?

在Rails控制台中,我正在创建一个记录,然后输入@ record.save,我得到了错误,但我无法弄清楚为什么?Rails C中有没有办法输出保存失败的原因?

谢谢

ruby ruby-on-rails ruby-on-rails-3

13
推荐指数
2
解决办法
5658
查看次数