我正在将Devise添加到现有的Rails应用程序中,并且已经定义了Users表.设计生成器推出了以下迁移:
class AddDeviseToUsers < ActiveRecord::Migration
def self.up
change_table(:users) do |t|
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, :default => 0
blah blah blah....
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
end
Run Code Online (Sandbox Code Playgroud)
没有生成向下迁移,我有一点时间删除这些索引.我在文档中看到了不同的建议表示法,并在网上提出了不同的建议,但似乎没有一个对我有用.例如...
def self.down
change_table(:users) do |t|
t.remove :email
t.remove :encrypted_password
t.remove :reset_password_token
blah blah blah...
end
remove_index …Run Code Online (Sandbox Code Playgroud) 我意识到它被拉进了一个独立的宝石,但是原因是什么?这只是简化Rails的问题,还是有一些原因我应该厌倦了auto_link?
(宝石表示它意味着"弥合人们迁移的差距",这告诉我,如果我将rails_autolink引入新项目,我必须做错事,不是吗?)
谢谢,
这似乎表明答案是肯定的:
从Ember Pre1到Pre4:每条路线有多个动态段?更新:动态细分的允许语法是什么?
......但我只是想确认一下.
就我而言,作为一个学习练习,我在Ember建立一个日历,每月显示.我需要能够从给定的月份链接到上个月,然后到下个月.
所以我希望能够
{{ linkTo calendar_month year month }}
Run Code Online (Sandbox Code Playgroud)
和
this.transitionTo('calendarMonth', year, month)
Run Code Online (Sandbox Code Playgroud)
想知道如果不使用嵌套资源这是否可行.我可以使用类似的东西:
App.Router.map(function() {
this.resource("year", { path: "calendar/:year" }, function() {
this.resource("calendar_month", { path: "/:month" }, function() {
this.route('index');
});
});
});
Run Code Online (Sandbox Code Playgroud)
...但这涉及从建模角度引入一个可能不需要存在的Year对象,这样我就可以在linkTo中使用它的id
我更愿意设置一个包含两个参数/动态段的路线:
App.Router.map(function() {
this.route('calendar_month', { path: 'calendar/:year/:month'});
});
Run Code Online (Sandbox Code Playgroud)
但我是否正确,这是不可能的?我只是想确保我这样做是最干净,最愚蠢的方式.
换一种方式:
我理解这个概念"如果您的用户界面是嵌套的,那么您的路由应该嵌套",但是,如果我的网址是嵌套的,这并不一定意味着我的界面也会嵌套.所以我想知道:如果我的网址是嵌套的,那么构建相应的嵌套模型总是最佳做法吗?
任何指导/澄清非常感谢.
谢谢,
似乎在嵌套路由的情况下,model在调用任何setupController钩子之前调用每个路径的钩子.那么孩子如何安全地访问父母的模型呢?
就我而言,模型实际上并不是持久化实体.它们都是基于params在模型钩子中生成的.所以我不认为Parent.find()/ ajax/promise似乎是要走的路.理想情况下,父模型应该可以访问ParentController,不是吗?或者这种方法不符合最佳做法?
App.Router.map(function() {
this.resource("parent", { path: "parent/:name" }, function() {
this.route('child');
});
});
App.ParentRoute = Ember.Route.extend({
model: function(params) {
// build a model here, based on params.
// no asynch stuff happening, should be good to go.
return { lastName: params.name }
},
setupController(controller, model) {
controller.set('model', model);
}
});
App.ChildRoute = Ember.Route.extend({
model: function(params) {
parentModel = this.controllerFor('parent').get('model');
return {lastName: parentModel.get('name') + 'son' };
// parent Model is null …Run Code Online (Sandbox Code Playgroud) 我正在编写一个练习Backbone应用程序,使用Rails后端API,我对在Backbone模型上保存的行为感到困惑.
假设一个团队有很多玩家,我想在一个POST中保存一个拥有众多玩家的团队.
所以在Rails中我有:
class Team < ActiveRecord::Base
has_many :players
accepts_nested_attributes_for :players
end
class Player < ActiveRecod::Base
belongs_to :team
end
Run Code Online (Sandbox Code Playgroud)
对于骨干客户端,我有一个Player模型和一个Players集合定义(未显示)
然后是包含团队模型(注意:没有团队集合)
Demo.Models.Team = Backbone.Model.extend({
urlRoot: '/teams',
defaults: {
'team_size': 12
},
initialize: function() {
this.players = new Demo.Collections.Players());
},
toJSON: function() {
var json = _.clone(this.attributes);
json.players_attributes = this.players.map(function(player) {
return player.toJSON();
});
return json;
}
}
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中检查我的字符串化JSON时,一切看起来都很好:
{"team_size":12, "players_attributes":[{"name":"Fred"},{"name":"Jim" },{"name":"Mark"}]}
Run Code Online (Sandbox Code Playgroud)
检查服务器日志,重复一次顶级属性('团队大小'),一次在顶层,然后在根密钥下重复.
Started POST "/teams" for 127.0.0.1 at 2012-06-07 13:39:40 -0400
Processing by TeamsController#create as JSON
Parameters: {
"team_size"=>12, "players_attributes":[{"name":"Fred"},{"name":"Jim" …Run Code Online (Sandbox Code Playgroud) 我想用一个按钮替换一个简单的链接以进行样式设置.使用button_to代替link_to似乎是阻力最小的路径,我至少渴望保持RESTful,这意味着在这种情况下的GET请求.
当我更换:
link_to "my_page", my_page_path
Run Code Online (Sandbox Code Playgroud)
有:
button_to "my_page", my_path_path, :method => :get
Run Code Online (Sandbox Code Playgroud)
... 有个 '?' 附加到URL的末尾.当然,这是一件小事.但有没有一种简单的方法来删除'?',因为我没有查询字符串参数?
这是一个浏览器问题,而不是一个rails问题?当然,我可以将链接设置为看起来像一个按钮,但我宁愿不...
我有一个Rails应用程序,我在前端使用Ember.我想将与ember相关的文件在目录结构中向下移动一级,但是当我这样做时,模板不再呈现.
在应用程序的普通,vanilla,工作版本中,我的目录结构是:
./app/
assets/
javascripts
application.js
ember-app.js
routes.js
store.js
models/
controllers/
routes/
templates/
views/
Run Code Online (Sandbox Code Playgroud)
with:application.js
//= require jquery
//= require jquery_ujs
//= require handlebars
//= require ember
//= require ember-data
//= require_self
//= require ember-app
App = Ember.Application.create();
Run Code Online (Sandbox Code Playgroud)
和:ember-app.js
//= require ./store
//= require_tree ./models
//= require_tree ./controllers
//= require_tree ./views
//= require_tree ./helpers
//= require_tree ./templates
//= require ./router
//= require_tree ./routes
Run Code Online (Sandbox Code Playgroud)
一切正常.但是,我想将ember-app文件和所有ember javascript代码向下移动一级,当我这样做时,模板不会渲染.(部分应用程序使用Ember,但不是整个应用程序,我正在尝试通过资产管道设置两条不同的路径.)
所需的结构是:
./app/
assets/
javascripts
application.js
embro/
ember-app.js
routes.js
store.js
models/
controllers/
routes/
templates/
views/
Run Code Online (Sandbox Code Playgroud)
with:application.js(修订版:'require …
ruby-on-rails asset-pipeline handlebars.js ember.js ember-rails
我有一个简单的Meteor应用程序演示,我想部署,但我希望它受密码保护.不需要个人用户帐户 - 现在只需一个登录/ pword即可.
有什么建议?我意识到Meteor在积极开发中有一个auth分支,所以不久之后就会有一个全功能的解决方案.但如果有人能建议短期阻力最小的道路,我将不胜感激.
谢谢
我正在使用SpriteKit编写一个涉及许多标记球的iOS游戏.我正在通过构建一个包含2个子节点的父SKSpriteNode构建这些'rollingBalls':
a)SKShapeNode(实际圆形)
b)和SKLabelNode(标签)
球将在整个屏幕上移动,彼此之间以及其他物体在2维中相互作用,并且完全取决于预期的物理(想想台球).但是,如果可能的话,我希望标签不与父母一起旋转,这样它在任何时候都很容易阅读.
最简单的方法是什么?
标签不应该是容器的孩子吗?还有其他方法可以将它钉在球形状上吗?或者我可以在标签上设置一些属性等等?
这就是我现在所拥有的:
double ballDiameter = 40;
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect:
CGRectMake(-ballDiameter / 2, -ballDiameter / 2,
ballDiameter, ballDiameter)];
SKSpriteNode *container = [[SKSpriteNode alloc]init];
container.name = @"rollingBall";
SKShapeNode *ballShape = [[SKShapeNode alloc] init];
ballShape.path = ovalPath.CGPath;
SKLabelNode *ballLabel = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
ballLabel.text = @"some random string";
ballLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter;
ballLabel.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;
ballLabel.position = CGPointMake(0,0);
[container addChild:ballShape];
[container addChild:ballLabel];
container.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ballDiameter / 2];
container.physicsBody.usesPreciseCollisionDetection = YES;
Run Code Online (Sandbox Code Playgroud) 我正在使用SpriteKit为iOS编写游戏.我想游戏是全屏,没有状态栏等.如何隐藏状态栏?
我正在尝试将Minitest用于现有的Rails应用程序(3.2),但没有运气路由测试.我已经尝试过rspec语法(应该是route_to)和TestUnit语法(assert_routing),但没有运气.
有什么建议让这个工作?我需要包含的具体模块等?
谢谢
当事件发生时,SKNode子类应该如何通知父场景?
我有一个SKNode子类,通过根据游戏逻辑重新绘制或删除节点来处理触摸事件.用于通知事件发生的父场景(或其他兄弟SKNode实例)的iOS最佳实践是什么?我应该使用NSNotification中心吗?某种形式的授权?我想避免紧耦合.我可以想到几种方法来完成它,但想知道是否有标准做法,因为似乎有非游戏MCV iOS设计(例如NSNotification用于模型之间的通信,或模型 - >控制器,委托或目标 - 视图操作 - >控制器等)
从概念上讲,我喜欢SKNode子类基本上服务于"视图"角色,解释触摸事件,然后将"语义"游戏信息传递给包含场景或其他节点的想法.
// SampleScene.m
#include "SampleScene.h"
#include "SampleBallNode.h"
@implementation SampleScene
- (void)didMoveToView:(SKView *)view {
if (!self.contentCreated) {
[self createSceneContents];
self.contentCreated = YES;
}
}
- (void)createSceneContents {
self.backgroundColor = [SKColor whiteColor];
self.scaleMode = SKSceneScaleModeAspectFit;
[self addBall];
}
- (void)addBall {
SampleBallNode *ball = [[SampleBallNode alloc] init];
ball.position = CGPointMake(100, 100);
[self addChild:ball];
}
@end
// SampleBallNode.m
#include "SampleBallNode.h"
- (id)init {
if ([super init]) {
self.name = @"ball";
self.userInteractionEnabled = YES;
[self …Run Code Online (Sandbox Code Playgroud) ember.js ×3
ios ×3
sprite-kit ×3
ember-router ×2
objective-c ×2
autolink ×1
backbone.js ×1
button ×1
ember-rails ×1
fullscreen ×1
get ×1
javascript ×1
meteor ×1
minitest ×1
rotation ×1
routing ×1
ruby ×1
statusbar ×1