Rails 关于 rails 数据库连接、事务、预编译和批处理的困惑

fengzhilian818 · 2014年05月26日 · 最后由 ericguo 回复于 2014年05月27日 · 2554 次阅读

接触 rails 没多久,公司现在在做一个 APP 项目 iCaper,想知道 Rails 的很多 find_by_id, find_all_by_name ...等等这些方法,在一个 action 里面多次调用的时候,数据库连接是用的同一个吗,是在同一个事务下吗?(Tips:ruby 或 rails 怎样让同一个线程中的不同模块间共享同一个数据,比如数据库连接?)

def index
  if User.find(id)
    @other_productions = Production.find_all_by_price(price)
    @my_productions = Production.find_all_by_user_id(user_id)
    ......
  end
end

还有预编译之后进行批处理数据库操作,有木有这样的方法呢,求详解!

  1. find_by_id, find_all_by_name 使用的是同一个数据库连接
  2. 同一事务在绝大多数情况下是保证的(例外情况很复杂,我观察到,不过不知道有啥规律)
  3. Ruby 从来没有预编译这样的阶段,因为是动态语言,不过的确有一个find_each供批量处理数据。
  4. 注意 find_by_id 之类的方法现在在 Rails 4 里面已经全部被find_by替代了,当然,最标准的还是where(从文档详细程度你应该已经能看出倾向性。。)

#1 楼 @ericguo 同一个数据库连接:是不同 model 使用的不同的连接吗(The same connection pool,but different connection?)还有数据库连接的生命周期是怎样的呢?可以手动创建连接,关闭连接吗?

#2 楼 @egg_show 可以是不同连接,或者是相同连接,余下的问题我在实际使用中从不考虑,所以抱歉无法回答。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号