小编mah*_*off的帖子

缓存有限的关联

我正在尝试使用其关联缓存ActiveRecord.问题是访问检索记录上的关联时存在数据库查询.

通常情况下,我只是缓存加载Rails.cache.write('post', Post.includes(:comments).find(99)).这似乎有效,但问题是我只想缓存关联的有限子集,并且在急切加载时会忽略限制(例如这里提到).因此,Post.includes(:popular_comments).find(99)将返回所有评论,而不仅仅是流行的评论.

所以我在懒惰加载关联后尝试缓存对象,但是在拉出对象时不幸发生了一个查询:

class Post < ActiveRecord::Base
  has_many :comments
  has_many :popular_comments, :class_name > 'Comment', :limit => 20, :order => :votes

post = Post.find(99)
post.popular_comments # lazy-load limited associations
Rails.cache.write('post', post)
...
Rails.cache.read('post').popular_comments # Unwanted SQL query :(
Run Code Online (Sandbox Code Playgroud)

我尝试过缓存克隆,同样不需要的SQL查询.我已经尝试使用redis和memcached实现,结果相同.奇怪的是,这个序列确实可以在控制台上运行,但在控制器或上面的视图中的简单用法失败(即SQL发生).

更新(2017年4月):我现在说这是一个愚蠢的前提.缓存整个对象通常是浪费的,因为它使用了大量的缓存存储,并且序列化/反序列化很慢.缓存关联(如本问题中所述)将该浪费乘以N.通常,只缓存原始ID和HTML片段会更有效.

activerecord caching ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
2160
查看次数

环绕浮动时避免悬空文本

图片说得最好:

在此处输入图片说明

它只是一个float: left图像(http://jsbin.com/itihes/1)。有什么方法可以防止纯 CSS 中的动态文本出现此问题?我确实希望文本换行,但如果它少于一整行(最好是两整行),则所有文本都将保留在右侧的同一块中。

图像宽度是固定的,但整个块的宽度是动态的。

html css word-wrap css-float

5
推荐指数
1
解决办法
1033
查看次数

从Gemfile.lock更新Gemfile,以冻结gems

从Gemfile生成Gemfile.lock之后,是否有任何工具可以往返回冻结Gemfile中的版本.我宁愿避免手动操作.

背景:在Gems上冻结次要版本是一个好习惯,例如,如果Gemfile.lock是2.4.1,我想更新Gemfile以包含〜> 2.4(如此处所述).

gem ruby-on-rails bundler gemfile

5
推荐指数
1
解决办法
813
查看次数

用于redis-cli的Vi模式

我有set editing-mode vi.inputrc,它影响Ruby,MySQL等的控制台.但它不适用于Redis,我想知道是否有任何方法可以实现它(理想情况下在OSX和Linux上).

(这里也提到过.)

vi command-line redis

5
推荐指数
1
解决办法
551
查看次数

动态/ Ajax页面上的Stripe checkout按钮

根据标准示例,我在表单中集成了Stripe checkout按钮和脚本标记.如果内容作为新的HTML页面输出,它可以工作,但如果内容是动态引入的(通过Ajax和innerHTML),则不显示该按钮.如何手动触发?

javascript stripe-payments

5
推荐指数
1
解决办法
894
查看次数

字符串的Base62哈希

我想做一些类似的事情,fingerprint = Digest::SHA256.base64digest(str)但是要使用base62而不是base64。如何有效地构建任何字符串的唯一以base62编码的字符串哈希?

ruby base64 encoding

5
推荐指数
1
解决办法
4675
查看次数

使用ActiveRecord解释COUNT个查询

我想做以下事情:

Post.count.explain # doesn't work
Run Code Online (Sandbox Code Playgroud)

之所以失败,是因为EXPLAIN是Relation上的一种方法,而Post.count不是一种Relation。它只是查询结果的规则整数。那么如何解释计数查询呢?

mysql performance activerecord ruby-on-rails count

5
推荐指数
1
解决办法
1053
查看次数

在 Rails 5 中,如何删除主键的默认值,即 'id' 列并使其再次自动递增?

在我的 rails 应用程序中,有一个表的 'id' 列默认值设置为 0。我想删除此默认值并再次使此列自动递增。我试过了

change_column_default(:table_name, :id, nil)

但它似乎不适用于诸如“id”之类的主键

ruby-on-rails ruby-on-rails-5.1

5
推荐指数
1
解决办法
174
查看次数

以CSS缩写填充属性,用于填充,边距等

有没有办法在速记中跳过指定CSS属性,包括填充,边框,边距等.

喜欢padding: <skipped> 1em 2em而不是:

padding-right: 1em
padding-bottom: 2em
Run Code Online (Sandbox Code Playgroud)

css shorthand

4
推荐指数
2
解决办法
652
查看次数

安装JSON gem的本机扩展错误

我已经设置了Brightbox Ruby 2.1.0 apt包并遇到了本机编译错误安装json包.

$ sudo gem install json -v '1.8.1'

Fetching: json-1.8.1.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing json:
ERROR: Failed to build gem native extension.

    /usr/bin/ruby2.1 extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1
Run Code Online (Sandbox Code Playgroud)

我已ruby2.0-dev按照此处的说明安装,但它将标头放在不同的文件夹中(/usr/include/ruby-2.0.0/ruby,将它们复制到/ usr/lib/ruby​​/include没有用).知道如何安装这个宝石吗?

ruby ubuntu native ruby-2.1

4
推荐指数
1
解决办法
2436
查看次数