好贴!
我觉得用像 Yeoman 这样的前端框架不错。会把文中提到的很多问题都解决
可以连,还可以连接到不同的数据库。我之前有一个项目一个 Rails 同时连接到 Postgres,MongoDB 和 Redis
看看 API BluePrint https://apiblueprint.org/
原来 Coding WebIDE 的后台是用 Docker 实现的呀?领教了!
尝试这个 gem: https://github.com/pry/pry
binding.pry
还有尽量不要使用 Rails4 中的 ActionController::Live 当使用这个模块并用 Warbler 打包成 war 文件部署到 Java server(例如 Tomcat)上之后,会遇到各种意想不到的问题
部署到 Tomcat 上偶尔会出现 ClassLoader 问题
我查过国外的 stack over flow 上的一些。好像目前的 Angular 不支持在 Directive 中输入 resolve 属性,但有很多国外 developer 已经请求加入此功能,详情请看: https://github.com/angular/angular.js/issues/2095 不过如果你就是想达到类似像 router 中 resolve 属性那样效果的话(在后端没有返回数据之前,不加载此 directive),你可以尝试用 jQuery 中的 Ajax api 请求后台 JSON。在发送 AJax 请求的过程中,有一个 async 属性,把它设置为 false(默认情况是 true)。这样你的 directive 代码从异步变成了同步。在你后台没返回之前,此方法将一直堵塞。虽然这个办法不太好,但是目前恐怕只能这么做
先回答你的问题: 1 在创建 Directive 的时候,Directive 支持一个叫 controller 的属性。这个 controller 在 link 函数之前调用,它就跟你在 router 上声明相应 template 所对应的 controller 一样,只不过这里的 controller 对应的是 directive 的 template,而不是 router 上声明的 template。如果你有兴趣读过 ngRoute 代码的话,它们的底层实现做的无非就是在 ng-view 这个 directive(注意,ng-view 也是 directive)上加一个 controller 属性,然后把你在之前 router 中声明的 controller 绑定到这个 ng-view directive 上。Angular 中除了 Controller 之外其余的 components 都是 singleton(单件)。也就是说 controller 可以有很多 instances。因为你在 router 和 directive 中都用到了 ProjectListCtrl,所有这个 controller 会被创建两次。 2 $controller 是一个 Angular 内置的 service,它专门用来创建 controller 实例(之前也提到 controller 可以被多次实例化,这个 service 有点像 Java 中的工厂模式)。他的第一个参数如果是 String 的话他会通过这个 String 来寻找之前你在 app 中注册过的 Controller,如果找得到的话他会用这个 controller 对应的 constructor 来实例化此 controller。第二个参数是一个可选的 object。此 object 上所有声明的属性都可被此 controller 实例(注意,仅此 controller 实例)作为依赖注入(Dependency injection)例如:
function MyController(myDependency){
console.log(myDependency)
}
//执行完以下代码应该会在console打印 “hello”
$controller('MyController', {myDependency: 'hello'});
//执行完以下代码应该会报错,因为你没有注入myDependency依赖,angular的DI系统找不到myDependency代码依赖
$controller('MyController');
既喜欢 Java 又喜欢 Ruby 的可以尝试使用 jRuby。很好的结合了两种语言的优点
你可以尝试用$controller service 手动构建 controller。$controller service 的第二个参数可以传入一个 object,定义你所有想 inject 的依赖。比如,根据你的情况,projectDirective 你可以这么写:
.directive('projectDiretive', function ($controller) {
return {
replace: true,
template: '<h1>{{ctrl.project.title}}</h1><p>{{ctrl.project.description}}</p>',
controller: $controller('ProjectCtrl', {project: ....//你想要注入的object} ),
controllerAs: 'ctrl',
link: function (scope, el, attrs, ctrl) {
console.log(scope)
}
}
})
详情请参看 angular 文档:https://docs.angularjs.org/api/ng/service/$controller
resolve 中的 property 是通过 router 而注入的。所以当你再定义路由的时候,resolve property 中的依赖可以正常注入到其相应的 controller 中。而 directive 就不行了。当你在 directive 中使用 controller 属性的时候,只有以下 objects 可以被注入: $scope, $element, $attrs, $transclude, 以及你定义的所有 service,例如 projectService
弱弱问一句,Rails4 中的 includes 或者 eager_load 语句可不可以像 joins 那样支持自定义话的 join 语句?
Session 里默认情况下就是保存在用户浏览器里的一段被你的 rails 应用签过名的 cookie 值。里面包含了登录用户的 user_id。Rails4 中,cookies 值会被加密
可以用 Yeoman 单独开发前段代码,Rails 只只负责开发 API。到最后用 Yeoman 来打包前段代码,并把相应的打包好的代码,包括 index.html, application.js, application.css 作为静态文件直接放到 rails 项目中的 public 目录下,让 web 服务器直接处理
刚试过。果然可以!只不过在把 Mongoid gem 加入 Gemfile 之后每当使用 Rails 的 generator 生成 model 或 scaffold 之后,rails 将默认使用 Mongoid 作为 ORM 而不是 ActiveRecord,Migration 以后也需要手动创建!
多谢各位大侠的回复!
#5 楼 @lgn21st 他自己在博客曾说过。The best way I can describe it is that I feel paralized under the pressures of work. http://railscasts.com/announcements/11
declarative authorization
连出那么多 Rails 视频,据说已经瘫掉了!
Github 就是用 ROR 做的!
不好意思,应该是:
= form_tag "YOUR URL" do
= fields_for :company do |c|
= c.fields_for :departments do |d|
= d.group do |g|
...
end
end
end
后台得到的 hash 将是
{:company => {:departments => {:group => {}}}}
{:company=>{:departments=>{:group=>{...}}}}
这是后台得到的 Hash
一班人很难发现问题出在哪