小编Nud*_*oll的帖子

从Ember.Route中访问参数的正确方法是什么.setupController?

Ember.Route.model有权访问params变量,但Ember.Route.setupController没有.这对我来说很麻烦,因为我的路径有多个动态段,我需要在我的模板中使用所有这些段.

具体来说,我的路径如下:/project/:project_id/task/:task_id.请注意,任务可以属于许多项目,而不仅仅是一个.因此,我们不能告诉我们正在查看的项目只是查看任务本身:我们必须使用URL中找到的项目ID.这是我目前正在做的事情:

App.TaskRoute = Ember.Route.extend({

  // This works just fine:
  serialize: function(model) {
    return {
      task_id: model.get('id'),
      project_id: this.modelFor('project').get('id')
    };
  },

  model: function(params) {
    this.set('parentProjectId', params.project_id);

    return App.Task.find(params.task_id);
  },

  setupController: function(controller, model) {
    var parentProject = this.modelFor('project') ?
                        this.modelFor('project') :
                        App.Project.find(this.get('parentProjectId'));
    controller.set('parentProject', parentProject);

    controller.set('content', model);
  }
});
Run Code Online (Sandbox Code Playgroud)

也许我是偏执狂,这只是感觉hacky.如果路由是为了访问参数,那么它已经params附加了一个属性.有没有更好的办法?

编辑:我对上面的代码做了一些更新.此外,我的路线看起来像这样:

App.Router.map(function() {
  this.resource('project', { path: '/project/:project_id' });
  this.resource('task', { path: 'project/:project_id/task/:task_id' });
});
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data ember-router

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

如何在Firebase中执行多地点更新时使用交易?

在我的Firebase数据库中,我需要一次写入两个位置.我有两个位置的规则,确保用户不能在不同时写入其他位置的情况下写入.

对这些位置之一的写入需要是递增/递减.当然,这必须通过事务来完成,否则我不能保证用户不会覆盖某个其他用户对同一节点的同时递增/递减更新.

问题是,我找不到任何关于将多位置更新与事务相结合的文档.这不可能吗?

firebase firebase-realtime-database

10
推荐指数
1
解决办法
1873
查看次数

修改关系时,Ember Data模型不会变脏

我的Ember应用程序中有一个模型,它具有hasMany关系:

App.Book = DS.Model.extend({
  tags: DS.hasMany('tag')
});
Run Code Online (Sandbox Code Playgroud)

问题在于,当向书籍添加/从书籍中删除标签时,书籍模型本身不会变得"脏".例如:

book = this.store.find('book', 123);
book.get('tags.length')
==> 0
tag = this.store.find('tag', 456);
book.get('tags').pushObject(tag);
book.get('tags.length')
==> 1
book.get('isDirty') // should be true, but is false
==> false
Run Code Online (Sandbox Code Playgroud)

在我看来,book实例现在应该是脏的,因为它的一个关系被改变了.我究竟做错了什么?

ember.js ember-data

7
推荐指数
1
解决办法
1360
查看次数

延迟工作泄漏内存?

我在我的Ruby on Rails应用程序(v2.3.8)中使用了collectiveidea的delayed_job,并在8GB RAM Slicehost机器(Ubuntu 10.04 LTS,Apache 2)上运行了大约40个后台作业.

假设我在没有工作人员运行的情况下进入我的服务器.当我这样做时free -m,我发现我通常使用大约1GB的RAM中的8个.然后在启动工作人员并等待大约一分钟让它们被代码使用后,我达到了大约4GB.如果我在一两个小时内回来,我将在8GB并进入交换内存,我的网站将产生502错误.

到目前为止,我刚刚杀死了工人并重新启动它们,但我宁愿解决问题的根源.有什么想法吗?这是内存泄漏吗?或者,正如朋友建议的那样,我是否需要找出运行垃圾收集的方法?

apache ubuntu memory-leaks ruby-on-rails delayed-job

6
推荐指数
2
解决办法
2736
查看次数

Ember中的全局变量

在Ember中存储全局变量的适当方法是什么?例如,我在Ember中有一个User模型,但我总是想知道该模型的哪个特定实例(包括其id,名称,电子邮件等)对应于当前登录的用户.

我应该以某种方式将它存储在Ember中吗?或者只是将JS变量附加到window对象(例如window.currentUserId = 1;)并使用它?

ruby-on-rails ember.js ember-data

6
推荐指数
1
解决办法
3516
查看次数

Rails 3.1 + Daemons gem不允许我访问我的数据库

我正在尝试为在Ubuntu服务器上运行的Rails 3.1应用程序设置一个守护进程.就像这样简单:

require File.expand_path('../../config/environment',  __FILE__)
require 'rubygems'
require 'daemons'

Daemons.run_proc('my_script') do
  loop do
    puts BlogPost.count
    sleep(5)
  end
end
Run Code Online (Sandbox Code Playgroud)

但是当我到达时BlogPost.count,我收到以下错误:

/usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `query': Mysql2::Error: MySQL server has gone away: SHOW FIELDS FROM `blog_posts` (ActiveRecord::StatementInvalid)
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `execute'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `log'
from /usr/lib/ruby/gems/1.8/gems/activesupport-3.1.0/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:283:in `execute'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/mysql2_adapter.rb:473:in `columns'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `initialize'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:185:in `with_connection'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:92:in `initialize'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `call'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `default'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `[]'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:706:in `columns'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/base.rb:722:in `column_names'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.1.0/lib/active_record/relation/calculations.rb:192:in `aggregate_column'
from …
Run Code Online (Sandbox Code Playgroud)

mysql scripting ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

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

在Rails中渲染大量的ActiveRecord对象

我有一些Rails控制器动作以这种方式响应AJAX请求:

books = Book.all
render :json => { :books => books }
Run Code Online (Sandbox Code Playgroud)

这应该相对较快,但是需要花费5秒钟,这对于网络上的任何请求来说都太长了.日志看起来像这样:

Completed 200 OK in 5212ms (Views: 2679.7ms | ActiveRecord: 147.7ms)
Run Code Online (Sandbox Code Playgroud)

我不明白当我没有渲染到视图文件时如何在"视图"中花费2.6秒,或者总共花费5212ms.什么花了这么多时间,怎么会加快速度呢?

编辑:在这个特定的请求中返回了大约1000本书,我猜每个都是大约1kb的数据.编辑2:查看控制台中的响应,响应的大小为973kb.

performance activerecord json ruby-on-rails ruby-on-rails-3

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

我应该如何将已排序的项目存储在数据库中?

在我的应用程序中,用户可以按照他们选择的顺序重新排列他们喜爱的书籍.

我的数据库中有一个"书籍"表,每本书都有一行.目前,有一个名为"position"的整数列,用于存储每本书的位置:1为顶级书籍,2为下一本书,等等.

问题是,如果有人将书从位置#11000拖到位置#1,那么我必须对数据库进行11,000次更新.这似乎效率低下.有一个更好的方法吗?

我曾经有过的一个想法就是让另一个名为"book_sort_orderings"的表或其他东西,每个用户都有一行.一列是一个巨大的文本列,用于存储书籍ID的排序列表.然后,当用户重新排列书籍时,我可以将此值拉出到我的代码中,在那里执行重新排列,并更新数据库行.当然,每当添加或删除一本书时,我都必须更新这个数组.这是处理事情的"正确"方式吗?或者有什么聪明的我可以做的事情来加快速度而不改变我目前的设置?

database activerecord database-design ruby-on-rails relational-database

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

如何在Ember JS中为视图使用自定义/动态属性?

我的Handlebars文件看起来有点像这样:

{{#each book in view.bookcase}}
  {{view App.BookView classBinding="book.read:read:unread"}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

我想添加一个属性,book-id="1"或者当前书的ID是什么,但我不知道如何.如果我试试这个......

{{#each book in view.bookcase}}
  {{view App.BookView book-id="book.id" classBinding="book.read:read:unread"}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

...然后该属性字面上设置为"book.id".有任何想法吗?

handlebars.js ember.js

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

如果用户登录多个帐户,如何在给定线程ID的情况下可靠地链接到Gmail对话?

如果您已登录多个Gmail帐户,Google会更改网址以引用您当前使用的帐户.例如:

https://mail.google.com/mail/u/0/#inbox/138d85da096d2126我的主帐户https://mail.google.com/mail/u/1/#inbox/128cfe99d055805d中的convo与另一个帐户 中的convo相比.

请注意,一个帐户/u/0在URL中有另一个帐户u/1.

我的问题是:鉴于我已使用Gmail REST API查找特定线程的ID,我该如何可靠地链接到该线程?是否有任何编程方式向Google询问用户登录的帐户,以及每个帐户属于哪个序列(0,1,2,...)?

gmail google-api google-openid google-oauth gmail-api

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