似乎较旧的路由使用StateManager
示例和较新的示例使用的概念Router
.有什么区别以及为什么要使用其中一个?
我敢肯定,当我深入挖掘时,这将变得清晰,但是现在,如何实现这一目标并不明显.
我正在关注有关路由的这篇有用的SO文章的信息,但是示例中缺少一个重要的部分,即如何在不必单击"主页"链接的情况下立即呈现"主页"视图?
我已经开始深入研究文档以试图理解这一点,但同时为后代回答似乎是一个有用的问题.
我一直在玩与工作的jsfiddle例如,从上面的问题,在这里,并与该其他例子比较我发现,似乎有默认的路由工作
到目前为止,它仍然是一个谜.
当前代码:
App.Router = Em.Router.extend({
enableLogging: true,
location: 'hash',
root: Em.State.extend({
// EVENTS
goHome: Ember.State.transitionTo('home'),
viewProfile: Ember.State.transitionTo('profile'),
// STATES
index: Em.State.extend({
route: "/",
redirectsTo: 'home'
}),
home: Em.State.extend({
route: '/home',
connectOutlets: function(router, context) {
var appController = router.get('applicationController');
appController.connectOutlet('home');
}
}),
// STATES
profile: Em.State.extend({
route: '/profile',
connectOutlets: function(router, context) {
var appController = router.get('applicationController');
appController.connectOutlet('profile');
}
}),
doOne: function() {
alert("eins");
}
})
});
Run Code Online (Sandbox Code Playgroud)
更新:解决方案
事实证明,我使用的例子不起作用的原因是因为它使用Em.State.extend
而不是Em.Route.extend …
我试图找出我的rails应用程序生成一堆额外查询的位置.我需要一些关于如何解决它的想法.或者,如果有人能给我一些提示,我将不胜感激.
我得到这些:
SQL (1.0ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
SQL (0.8ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
SQL (0.8ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
Run Code Online (Sandbox Code Playgroud)
每次向DB请求时反复重复(单次请求多达70次)
我尝试安装一个跟踪查询源的插件,但它确实没有任何帮助.我正在使用hobofields gem,dunno如果这就是它正在做的事情但我现在有点坚持它
有关追捕这些额外查询来源的任何提示?
我在Goliath(eventmachine)下使用em_mysql2的activerecord.最奇怪的事情发生在我的用户模型上.当我第一次对/ users进行POST时,它只能按预期找到.当我做第二次POST时,我收到错误.
Mysql2::Error: This connection is still waiting for a result, try again once you have the result: INSERT INTO `users` (... and so on ...)
Run Code Online (Sandbox Code Playgroud)
对于我的任何其他模型或路线,都不会发生这种情况.我假设如果数据库连接处于混乱状态,我会在其他请求上看到相同的错误但是没有 - 所有其他数据库更新和GET请求似乎都运行正常.
有谁知道这只会发生在我的用户模型和仅用于User.save操作的情况下?活动记录是否以某种方式存储它用于执行Model.save的数据库连接并重新使用它?
编辑:
当我写这个问题时我不知道提到我使用ActiveRecord作为ORM.我也没有提到我异步向Mongo数据库发送请求以获取用户身份验证信息.
我的解决方案
事实证明,这个错误发生的唯一时间是来自Mongo的响应在MySQL的响应之前回来,这导致MySQL响应被不同的光纤接收而不是发出请求的光纤.由于我使用的MySQL2光纤实现使用光纤的objectID来管理连接,这似乎导致了这个问题.
ActiveRecord + MySql2 + Fibers + Goliath中的整体连接池不是完全支持的配置.(从那时起可能会有一些进展)
这是问题:我正在使用活动记录并返回一些照片对象.这些照片对象的最终消费者将成为一个移动应用程序.
响应需要有移动开发人员返回的缩略图版本请求JSON回来看起来像这样.
{
"root_url":'http://place.s3.amazonaws.com/folder/',
"image_300":'image_300.jpg',
"image_600":'image_600.jpg',
"image_vga":'image_VGA.jpg',
"image_full":'image.jpg'
}
Run Code Online (Sandbox Code Playgroud)
而不是这样的:
{
"root_url":'http://place.s3.amazonaws.com/folder/',
"thumbnails": {
"image_300":'image_300.jpg',
"image_600":'image_600.jpg',
"image_vga":'image_VGA.jpg',
"image_full":'image.jpg'
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,简单的方法是为每个缩略图创建列并使其工作.我不喜欢被锁定,但因为如果我们想要不同的缩略图以后它会意味着向数据库添加列等.我更愿意在模型类中指定缩略图或者有一个单独的缩略图表拇指每排表.
我在一个连接中使用了GROUP_CONCAT来查看delegate,composition_of,使用:method => in to_json ..这些看起来都不像选项.是否有捷径可寻?
基本模型示例:
class Photo < ActiveRecord::Base
has_many :thumbnails, :as => :thumbs_for #polymorphic
end
class Thumbnail < ActiveRecord::Base
# columns = name, filename
belongs_to :thumb_for, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)
到目前为止,结果看起来像是基于jesse reiss的答案
def as_json(options)
options ||= {} #even if you provide a default, it ends up as nil
hash = super(options.merge({:include => :thumbnails}))
if thumbs = …
Run Code Online (Sandbox Code Playgroud) activerecord ×2
ember.js ×2
ruby ×2
eventmachine ×1
json ×1
mysql2 ×1
profiling ×1
routes ×1
routing ×1
sqlite ×1