瞎扯淡 Angular.js 与 Rails 如何搭配比较合理呢

jicheng1014 · 2015年04月03日 · 最后由 miclle 回复于 2015年04月03日 · 3114 次阅读

angular 现在在整个生态圈吹的都挺火,小弟也试着拿它做点小 demo ruby-china 里也有很多朋友做这块,也有一些开源的产品比如“创业赢”之类的紧紧贴着 angularjs 但是有一点我觉得开发的时候是不是会有些别扭, angularjs 在我感觉中也是一个非常“全面”的框架,自己管理路由,自己管理压缩,自己做 view,经常配合 gruntjs 来使用 rails 也是一个非常全面的框架,也自己管理路由,自己管理 assets, 两个框架在一起,经常打架的样子(turbolinks) 我知道也有 angularjs-rails 等 gem 来解决类似的事情 但是等到部署要压缩,concat js 的操作之后,又会遇到各种奇怪的问题

最让我觉得难受的是, 写代码的时候经常就会在脑袋里蹦出这种问题:觉得这个是 rails 本身就可以处理的,但是似乎交给 angularjs 处理也行?哎,放到 angular 里又增加了一大堆代码耶?算了我还是交给 rails view 来做吧。

所以我觉得是不是直接让前端干干净净一个 angularjs + gruntjs 项目好了,rails 则只负责 REST API 的工作? 但是这种又觉得委屈了 rails,偌大的一个 ror,只做了一点点事,而且 rails 单纯做 REST API 效果我觉得甚至没有微软的服务 asmx + wsdl 来的方便大家使用。

当然 Rest 也可以用一些 gem 比如 grape 前几天看社区还有高人开发了个自动生成 api 说明的 gem,还蛮有意思的。

不知道各位朋友在开发 angular 项目的时候是怎么处理 rails 和 angular 的关系的。或者说,到底什么时候用 angular 处理,什么时候用 rails 处理?评判的标准是什么?还请各位高手赐教

rails 只做 api

rm -rf app/views
rm -rf app/assets
rm -rf verdor

# remove gem in Gemfile, 只剩下了
gem 'rails', '4.2.0'
gem 'mysql2'

# application.rb
# require 'rails/all'
# gem which rails/all
require 'active_record/railtie'
require 'action_controller/railtie'
# require 'action_view/railtie'
require 'action_mailer/railtie'
# require 'active_job/railtie'
require 'rails/test_unit/railtie'
# require 'sprockets/railtie'

# remove none useful middleware
config.middleware.delete ActionDispatch::Flash
config.middleware.delete Rack::Sendfile
config.middleware.delete ActionDispatch::Cookies
config.middleware.delete ActionDispatch::Session::CookieStore

    config.generators do |g|
      g.orm             :active_record
      g.template_engine :erb
      # g.test_framework  :test_unit, fixture: false
      # g.test_framework  nil
      g.stylesheets     false
      g.javascripts     false
      g.jbuilder        false
      g.helper          false
    end

#1 楼 @flowerwrong json 也是 view 啊。

#2 楼 @Rei 我没用 jbuilder ,你是觉得哪里有问题?

#3 楼 @flowerwrong 你是怎么输出 json 的?

#4 楼 @Rei render json: { status: 'success', data: { posts: @posts, total_count: Post.all.count }, msg: 'balabala' }, status: :ok

#5 楼 @flowerwrong 不用 jbuilder 的话每次传数据的时候都要敲这些 感觉略奇怪

前后端完全分离成两个项目 api: gem 'rails-api' gem 'rack-cors' gem 'jbuilder'

前端用 grunt 或 gulp

如果只是纯粹的做个小 demo 演示什么的,后端直接可以用 leancloud,firebase 这种服务

需要 登录 后方可回复, 如果你还没有账号请 注册新账号