Rails 求 Rails 小项目开发实现指引

singtat · 2014年10月29日 · 最后由 singtat 回复于 2014年10月29日 · 2301 次阅读

我是零基础学习 Rails 的,搬弄了三个星期。现在的基本情况是:1,英语四级,读 gitHub、RailsCast 只能懂 70% 的程度。2,已能配置 Rails 开发环境。3,已能创建 CRUD 应用。4,懂基本的 html、css、jQuery。5,已能为应用配上 devise(因为有中文教程,汗~)。

我想为本单位创建一个小项目,User Story 是: 一,用户需要注册和登录 二,能自动发动邮件验证,用于注册确认、找回密码。 三,用户可以自主创建表单(具体样式暂不考虑) 四,用户只能对自己的表单进行 CRUD 操作 五,用户能搜索自己的表单 六,每月 1 日自动发送邮件给用户(具体内容暂不考虑)

相信有经验的 Rails 开发者都感同身受:看书是看得懂,照着写例子也能写出来,但一到自己实操、想开发自己的 idea 时,就总好像找不到北的赶脚。 在此,我希望热心人能提供开发指引。 我有一点小小的要求: 别说 “从 ruby 开始认真学起” “参考 rails api” “跟别人多做项目” 什么的, 因为我不是打算深入研究 Rails 的人。我知道 Rails 有好多很棒的套件(gem),可以直接调用以解决具体问题的。 并且 Rails 的精神也是不要重复做轮子,能套用现成的,就别自己写了嘛。 衷心希望热心人能提供上述 User Story 的开发指引。抱拳。

三,用户可以自主创建表单

其实挺麻烦的

#1 楼 @msg7086 如果那个很麻烦,我先不考虑它了。请你提示下,怎样做到 四,用户只能对自己的表单进行 CRUD 操作?用哪个 gem?是 cancancan 吗?具体怎么调用?

四要基于三吧。 另外 cancan 我没用过所以没法说了…

  1. devise 完全 hold 住
  2. 同上
  3. 可以用一张数据库表存储表单主信息,另一个表存储表单 column 信息 (包括属性字段名和类型等). or: 只用一张表,表单内容直接用 json 形式,这方面的 gem? 不太清楚。
  4. 其实可以自己判断 current_user.
  5. 搜索可直接 sql 或sunspot
  6. 定时任务可选whenever或者rufus-scheduler 可配 action mailer.

@heylonj 谢谢!!你说得好详细了,虽然作为菜鸟的我还需要消化一下。 现在网上和书本上,能找到的案例,不是博客,就是社区网站。对于我这种不会举一反三的笨鸟来说,真是头大。 博客或社区网站,虽然都有做用户验证和权限管理的方法可以参考,但它们最大的特点就是:所有用户至少都可以浏览到所有文章 listing(或表单)。 而我希望用户登录后,只能看到自己的表单(或文章),看不到其他用户的。这方面,搜索了很久,都没有人提供案例。哎~

这个直接让你实现登陆注册验证, https://github.com/RailsApps/rails-devise#clone 至于后面要控制权限 看好 devise 的使用方法就好了!

一、二、六其实都不难,都有很好用的现成的 gem,看看 Raiscasts 里的相关内容即可。

二、四、五其实都是针对同一类资源(表单)的,难点在于自定义结构的表单,如果你愿意采用基于文档的数据库——比如 MongoDB 之类的,我认为是比较适合你这种应用的。若是基于关系数据库,你就得理清【表单】和【可自定义的表单项/类型】之间的关系,比如四楼提到的方案。

如果这对你来说是个难点(难在并非 Rails 自身的知识点,而是要扩展到软件的设计,对象关系等概念性的知识点),你不妨先从固定规格的表单开始。这样会降低问题的复杂程度(但是也同样降低应用的灵活性),先把固定规格表单的 CRUD 做顺做好,然后尝试扩展它,比如说可以为固定规格的表单添加可变数目的表单项/类型。

当这个功能做出来之后,你就知道如何把过去固定规格的表单变成完全自定义式的表单。对于初学者我更推荐这样做而不是一蹴而就,因为这样能帮你吃透它,而且以后可以很容易的举一反三,类似的应用场景还是蛮多的。

@nightire 你详尽热心的回复,值得我一千个赞! 我承认我是懒,我发帖是希望有人直接说出用哪个 gem,而不用我自己花几天去摸索。 你的其他帖子,我也看过,你是好热忱的人。 rails 让人既爱又恨。当初接触它,听到的是“超音速开发 web 应用”和“好简单”之类的赞许之词。但真的入门后,发觉那简直是无穷尽的海洋。又要熟悉 ruby,又要熟悉 git,又要熟悉 mysql,又要熟悉各种 gem,又要死啃英文。唉~一把心酸泪。我其实最初只是想学它来做一个公司内部简单应用而已,现在好像是进退两难的赶脚。

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