分享 初次使用 rails 就遇到的几个坑

yuanchunfa · 2013年01月16日 · 最后由 edokeh 回复于 2013年02月02日 · 4615 次阅读

以前只是关注 Rails,经常看看 ruby-china,在图书馆翻了两本 Rails 的书,其中有一本还是 rails 2.x 的,看了下了解了 Rails 的架构,熟悉了一下流程,知道怎么去看代码,不过还是没有动手写点东西,没有项目驱动。最近想给自己即将盘下的电脑培训 工作室写个网站,终于开始动手写了。没有任何前端经验的我还想写个酷炫的网站,注定不会顺利,刚开始就遇到两大大坑,没有能力去解决,只能另选方案绕过 了。

一、compass-twitter-bootstrap 在 ruby-china 看到《聊聊主流框架,Less/Sass/Compass/Bootstrap/H5bp》得出总结最好的组合是:SASS+Compass+Bootstrap,于是首先选择这个作为网页布局的框架,花了若干天,居然搞清楚 SASS 及 Compass 的关系与 Bootstrap 的大概使用了。试着写写 layouts 的头部布局,想法是左边 Logo,居右是个登录的 Form,发现不是固定 式布局,总是会按窗口比例缩放,查资料也只是说 container 就是固定布局,无解,后面也觉得这个样子不好看,于是换用 Bootstrap 黑又硬的 navbar,在写下拉项时有遇到下拉项显示不出来,群里问来问去无果,突然想到我先写静态 html 来测试,发现这新的 bootstrap 的 navbar 默认已经不是黑色的,这下拉项也没有问题,遂醒悟 compass-twitter-bootstrap Out 了,换用 bootstrap-sass,这几个无解的都解,container 就是固定布局,下拉项也出来了,navbar 默认白色也更有爱了。

二、slim 在 ruby-china 知道了 slim,比起冗余的默认模板 erb 真的喜欢,于是果断用起。没想到也是大坑,先上代码:

这个时候正常,本来 b class="caret"是要缩进去的,作为下拉项的子项,TAB、空格都试过,slim 解析就是出错,于是这下拉箭头不能出现在正确的地方。换回 ERB,没有问题。这个应该是 slim 的 BUG 吧?

这些天大坑就这些,总结经验教训:新手应该找好合适的文章,开源代码,源码跑通,跟着教程来做。一开始就堆积最佳方案,只怕会消化不了。

最近看到这篇文章,觉得很有道理 http://words.steveklabnik.com/rails-has-two-default-stacks

rails 有两套 stack: 37Signal Stack 和 Prime Stack 如果一开始入门就用 Prime Stack,确实会遇到很多很多坑,入门难 可以先用 erb 把 rails 跑起来,然后尝试各种组件

btw. classid 属性在 slim 可以简化

我现在越来越新手觉得还是先学 Sinatra 再学 Rails 比较好。。上来就 Rails,而且还是 3.1 以后版本,太复杂了。。3.0 其实挺适合新手的

问题一二都跟 Rails 无关。

问题二把编译出的 html 贴出来,看看是不是 bug。

我看了 bootstrap 文档,caret 的层级关系应该是

a.dropdown-toggle
  span.caret

你贴的代码错了。

额外说句,网上看到的所谓最佳实践都只是一家之言。

#3 楼 @Rei 谢谢指正,我这是参考 firebug,然后照样写,缩进后 slim 解析失败,出不来 html

因为前一行的 a class="dropdown-toggle" 后面有下拉项, slim 首先会正确地把下拉项按照字面输出. 如果下一行再向里缩进一级, slim 认为你需要的字面文本太多折行了, 下一行开始依然认为是字面文本, 所以 b 就会直接输出而不是按照标签解析.

这个规则在 slim 的文档里似乎没有明确指出, 只是在 Syntax Example 中的

- else
   p No items found Please add some inventory.
        Thank you!

演示了这一规则.

解决方案是不要在 a 标签后面直接写文本, 换一行以 | 开头再写.

请教个问题,haml 或 slim 怎么和前端人员配合啊?

#6 楼 @5long 谢谢,按你说的,问题解决了

#7 楼 @pongyo 前端人员一般都懂几个模板语言的,和他们沟通下就行了

个人觉得 rails 对于新的开发人员还是有很多的坑的。

@yuanchunfa 我觉得这根本就不是 Rails 的问题。问题一明显是基本的 HTML+CSS 不过关。没错,的确有一些 Gems 会 outdated,但如果你 HTML+CSS 够扎实的话,自己跟踪一下输出的代码就知道问题出在哪里。这玩意儿比 Ruby 或者 Rails 简单的不止一点半点;问题二我会归类为 “冒进”,也就是俗话说的:“走还不利索呢,就想跑了”,根据就是我对问题一的解释,奉劝楼主先把 erb 玩转再说吧,至少它是最接近 HTML 的。

基本同意楼上说的,不过其实话说回来,好像应验了以前的某篇文章,Rails is not for beginner

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