标签:creat connect override rpo 应该 过程 直接使用sql nec sql
ruby class內的method都是可以被修改、添加定义的。
修改影响所有实例,包括修改操作前创建的实例。
begin
# 可能會發生例外的 code
rescue AExceptionClass => some_variable
# 屬於 AExceptionClass 的例外發生時 run 這段 code
rescue BExceptionClass => some_other_variable
# 屬於 BExceptionClass 的例外發生時 run 這段 code
else
# 都沒有例外發生時 run 這段 code
ensure
# 無論有沒有發生例外,都會 run 這段 code
end
def foo
# 正常時的處理
rescue
# 發生例外時的處理
end
<%= "<div class=\"name\"> #{name} </div>" %>
<%= "<div class=‘name‘> #{name} </div>" %>
<%= %(<div class="name">#{name}</div>) %>
array = ["A", "B", "C", "D"]
array = %w(A B C D)
ActiveRecor,rake task在大数据量下运行是非常慢的,应该直接使用sql语句进行数据操作
posts = Post.where(:board_id => 5)
post.each do |post|
post.board_id = 1
post.save
end
当数据量达到十万条时,一天也跑不完
Rails 提供了 update_all 可以用,相当于直接使用sql的效果
Post.update_all({:board_id => 1}, {:board_id => 5})
如果十万笔数据加载到内存,估计超过10G,程序可能直接闪退
Post.find_in_batches(:conditions => "board_id = 5", :batch_size => 1000) do |posts|
posts.each do |post|
post.board_id = 1
post.save
end
end
Post.find_in_batches(:conditions => "board_id = 5", :batch_size => 1000) do |posts|
Post.transaction do
posts.each do |post|
post.board_id = 1
post.save
end
end
end
save 存储资料时,会调用一堆 validator 和 callbacks
update_column / sneacky-save会跳过,直接修改数据库字段,区别是update_column一次只能修改一个字段,后者可修改多个字段。
class Post < ActiveRecord::Base
has_one :meta
after_create :create_meta
deleagte :content, :to => :meta
end
避免直接对varchar(255) 加索引
ALTER TABLE post DROP INDEX PTitle, ADD INDEX(PTitle(13));
Mysql提供TRUNCATE TABLE清空表
delete_all不触发callback,但是会update index,所以相比TRUNCATE TABLE会很慢
TRUNCATE TABLE
ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{table_name}")
标签:creat connect override rpo 应该 过程 直接使用sql nec sql
原文地址:http://www.cnblogs.com/Jogging/p/201705-Ruby-ji-chu-shi-yi.html