计算集合时.通过大小或数量来做它更好吗?
大小= Ruby(@foobars.size)
Count = SQL(@foobars.count)
我也注意到,count再次前往db.
我正在尝试优化我们的一些查询.一个特别的挑战是试图加载多态模型.在这种情况下,UserView是多态的,并具有以下列:
user_id, user_viewable_id, user_viewable_type
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此查询时.
@user_views = UserView.select('user_views.* AS user_views, songs.* AS songs, users.* AS users')
.joins('INNER JOIN users AS users ON user_views.user_id = users.id')
.joins('INNER JOIN songs AS songs ON user_views.user_viewable_id = songs.id')
.where(:user_viewable_type => 'Song').order('user_views.id DESC').limit(5)
Run Code Online (Sandbox Code Playgroud)
它似乎并不急于加载查询.我正在使用名为MiniProfiler的gem ,它表示它实际上运行的是n + 1个查询,而不是一个.
以下AR查询返回此SQL:
SELECT user_views.* AS user_views, songs.* AS songs, users.* AS users FROM "user_views" INNER JOIN users AS users ON user_views.user_id = users.id INNER JOIN songs AS songs ON user_views.user_viewable_id = songs.id WHERE "user_views"."user_viewable_type" = …Run Code Online (Sandbox Code Playgroud) polymorphism activerecord ruby-on-rails eager-loading ruby-on-rails-3
假设我有一个计数器缓存,需要在每次页面加载时递增.假设我有10个Web实例.如何持续增加计数器缓存列?
使用一个Web实例可以轻松实现一致性.但是在多个实例运行时,可能会出现竞争条件.
这是一个快速解释.假设我的计数器缓存列被调用foo_counts,其起始值为0.如果同时加载了2个Web实例,则两者都将计数视为0.当需要增加计数时.它们都将计数从0递增到1.
我看着http://guides.rubyonrails.org/active_record_querying.html#locking-records-for-update
任何想法将不胜感激.
自http://emberjs.com/blog/2015/05/13/ember-1-12-released.html上的最新Ember版本发布以来,似乎有一种新的setter和getter方法语法.
我们应该习惯这样做:
fullName: Ember.computed('firstName', 'lastName', function() {
return this.get('firstName') + ' ' + this.get('lastName');
})
Run Code Online (Sandbox Code Playgroud)
代替:
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
Run Code Online (Sandbox Code Playgroud) 我需要在model钩子后设置一个控制器属性.我可以想到两种方法:
model(params) {
return this.store.findRecord('user', 1);
},
afterModel(model, transition) {
model.get('profile').then(profile => {
this.set('profile', profile);
});
},
setupController(controller, model) {
controller.set('model', model);
controller.set('profile', this.get('profile'));
},
Run Code Online (Sandbox Code Playgroud)
另一种方法.即跳过setupController:
model(params) {
return this.store.findRecord('user', 1);
},
afterModel(model, transition) {
model.get('profile').then(profile => {
this.controller.set('profile', profile);
});
},
Run Code Online (Sandbox Code Playgroud)
两者似乎都有效.
两种方法都有任何额外的优点/缺点吗?显然,后者更短.但是在afterModel钩子中设置控制器属性是否感觉"干净" ?
编辑:之间的关系/关联user和profile是async.
什么是记录Javascript/jQuery输出的最简单/最有效的方法?
目前,我alert('foobar');在代码中使用了类似块的东西.
我曾经在github问过,但也会尝试在这里询问."足智多谋"没有错;-).使用friendly_id 4.
我用slug =>"123 foobar"创建了一个用户.该用户的ID为200.
这样做时User.find('123-foobar'),它返回id为123的用户,而不是用户200.
这是一个错误吗?
如何Foo返回值@baz.此刻@baz回归nil.
module Bar
@baz = 'baz'
def get_baz
@baz
end
end
class Foo
extend Bar
end
Foo.get_baz # Currently returns nil
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,有没有更好的方法来实现这个逻辑?
ember-cli ×2
ember.js ×2
activerecord ×1
ember-data ×1
friendly-id ×1
javascript ×1
jquery ×1
logging ×1
polymorphism ×1
ruby ×1
sql ×1