20180211

2018年02月11日

肖威工作总结

  • 上午:坐车+看支付技术文档 我们需要进一步的理解RMVC的知识的架构,这样才可以帮助我们更好的理解支付的核心的逻辑; 打造任何的一个功能,我们都需要理解如果构建我们的模型,然后思考这个控制器如何完成,最后技术页面的美化的问题; 所以如果我们想要打造一个支付的逻辑的框架,我们就需要思考的核心的问题就在于,模型和控制器的处理的方法,然后基于这个维度完成思考如何更好的完成前端的页面的美化的过程,所以这才是我们最应该思考的核心的问题所在;

  • 下午:电脑优化+公积金减员 发现使用windows的电脑难以快速的完成工作,所以基于这个维度开始完成电脑的优化,然后完成了公积金的减员的问题; 针对于公司的整个框架来说,我们需要完成的是财务的结构,然后在这个过程中,完成各种关系的对接,从而完成公司化的运作; 懂财务,有产品,会运营,最后就可以完成公司的正常的运作,从而达到最好的状态;

  • 晚上:支付技术文档 在支付的逻辑体系里面,当下缺乏一个高人的视频的指点,然后在这个基础上面完成优化,这样我们就可以快速的获得自己的能力的提高,这是我自己现在比较缺乏的一部分;

实现功能

用户的登录、文章的展示与分类,文章的 CRUD ,文章分类的 CRUD。

项目过程遇到的问题

一开始,我是想做一个博客平台,但是发现角色数量提升后,项目的复杂度与难度超出我的预期,中途改变方向,先完成个人博客积累最少经验,后期在根据这个个人博客的扩展为博客平台。

项目的表结构

总共三张表,用户登录的 User 表,文章的 Article 表,文章分类的 Sort 表。article 增加一个字段,与 sort 表形成外键关联,在 Model 层,sort.rb 文件定义 has_many :articles ,article.rb 文件定义 belongs_to :sort ,使用 Sort.first 或 sort.find[:id] 查询一条文章分类数据,可以直接 “.” articles,调出所有关联的文章。这是它们的表结构与关联关系。

用户登录——"sorcery"

用户登录使用了 “sorcery” 这个 gem 实现, “sorcery” 功能类似 “devise” ,“devise” 支持多模型, “sorcery” 只提供单模型,在“sorcery” 通过字段属性决定模型角色,相对而言 “devise” 是重量级, “sorcery” 是轻量级,更适合定制会员系统。终端执行 rails g sorcery:install 执行初始化安装, 修改/config/initializers/sorcery.rb 配置文件,删除激活功能,这是为了减少配置的复杂度。使用 sorcery 成功注册第一个用户后,导航栏隐藏 “注册” 按钮,保留 “登录” 按钮。

模糊搜索——'ransack'

模糊搜索使用 'ransack' 这个 gem 实现,我以 article 表的 title 与 text 字段为搜索范围,根据项目需要搜索范围也可以加入其它字段。

分页功能——'will_paginate'

为了避免文章与搜索结果一下子展示过多,不方便浏览,我使用了 'will_paginate' 实现分页功能,优化页面显示。

在 Controller 层,添加关键代码,例如,修改 articles_controller.rb 文件的 def index,

@articles = Article.all.paginate(:page => params[:page], :per_page => 5 ) 分页参数暂时设定为5。

编辑器——'ckeditor'

文章的新建与编辑使用 'ckeditor' 这个 gem 实现。终端执行 rails g ckeditor:install初始化安装,在 application.js 文件下,加入关键代码 //= require ckeditor/init ,终端再执行 rake db:migrate ,重启 rails s ,View 层需要使用编辑器的位置,“.” cktext_area .

断点检测——'pry' 与 'pry-rails'

在遇到项目报错时,我经常使用 'pry' 与 'pry-rails' 这两个 gem 实现断点检测,例如:在 Controller 层的 articles_controller.rb 文件的 def create 中添加 binding.pry ,本地运行项目到该代码位置时,rails s 终端页面会暂停,可以输入 params 查看前端传递到后台的参数,或者直接输入实例变量 @article ,查看该变量的内部信息。这样能大大的提高 debug 的效率。

项目部署——'thin'

项目部署我用到了 ‘thin’ 这个 gem ,当终端执行 bundle install 后,在 config 文件夹下新建配置文件 thin.yml 填写相关配置,database.yml 配置文件根据服务器环境修改生产配置。在服务器上,git clone 项目代码,cd 项目名进入项目,vim config/thin.yml 与 vim config/database.yml 查看配置设定是否正确。 :wq 退出文件。在服务器的项目内执行bundle install, rake db:migrate,

启动 thin 服务器,终端执行 thin start -C config/thin.yml,重启 thin 服务器,将启动代码中的 start 改为 restart,停止 thin 服务器将启动代码中的 start 改为 stop 。

'capistrano' 这个 gem 我听说了解过,用了大概一小时的浏览相关文章,这个 gem 使用了 shell 脚本实现了自动化部署,实际项目部署需要定制配置文件,我没有深入研究这个 gem 。

gem 'bootstrap-sass'

gem 'sorcery' gem 'will_paginate' gem 'ransack' gem 'seo_helper' gem 'ckeditor'

gem 'thin' gem 'pry' gem 'pry-rails'”

作者:赵龙1043 链接:https://www.jianshu.com/p/44f261c7c7d5 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本次分享的目的

我是全栈营线上班二期学员——赵龙,最近找到第一份 “Ruby 工程师” 的工作。本人求职期间踩过不少的坑,希望全方面的分享我的经验,能帮助到全栈营希望从事 “ Ruby 程序员” 而不得要领的同学。

在北京求职期间,我不止跟一位全栈营的同学面对面交流,线上交流更多了。大家普遍反应第一份 “ Ruby 程序员” 工作很难找到,有人都打算放弃 Ruby 去学习 Python 了。甚至有人放弃转行 “ Ruby 程序员” 的想法了。

第一份 “ Ruby 程序员” 的工作没那么难,全栈营的学员普遍找不到工作的原因其实简单的不得了——思维死角,简单来说大家的思维进入了死胡同而不知,一直在原地打转。也许你以为自己很努力,那只是错觉。

解决问题的钥匙在其他地方 北京求职第一个月

全栈营线上班第二期于2017年6月基本结束,原计划是7月份来北京求职,中途出现一些意外,推迟到10月20日左右才到北京求职。事后反思,我到北京求职时间太晚了,越早来北京求职越好。

我到北京的第一天,就去全栈营线上班一期学长的初创公司面试,体验了第一次的 Ruby 面试。这次面试主要是让我下定决心尽快到北京,没有拿到 Ruby 面试通知,来北京也没有底气。当天上午,从河北到北京的高铁,我到了北京西站,直奔学长在中关村的创业公司办公地点面试,与学长进行了简短的面试。完成面试后,我直奔提前预定的短租房(北京东六环边的土桥地铁站旁边小区)。我无意中赶上了晚高峰。

第一次真正体验到了北京地铁的威力——太挤了!!!

三天后,我去北五环附近进行第二次 Ruby 面试。这次的面试官是近二十年工作经验的资深程序员,c、c++、java、golong、ruby、python等编程语言都接触过。面试的第一步就是 5 道笔试题,面试官尽力还挑选了最简单的题目给我,将最难的最后一题去掉了。但是,我一道题目都不会,尝试写出的3道题的答案还是错误。当面试官知道我是全栈营的学员后,露出的表情让我难忘。他说我的基础太差,这边没办法让我上班。既然收到这样的回复,我也只能默默收拾东西打道回府。

回到临时住所,我仔细的反思了这次面试暴露出来的问题——编程基础极差。为了解决这个问题,在一周内,我将 《Ruby基础教程》 这本书完整的看了一遍,在大脑中形成一个基本的 Ruby 知识地图。有两次魔改大赛的积累,书中 60% 的内容能理解,剩下不懂的用 google 或百度解决。期间,我继续在 BOSS直聘、拉钩、Ruby China 招聘板块等投递简历。

第二次面试,我尝试用魔改大赛的项目为自己加分。但是,在面试官的几个 Rails 项目基础问题的发问下,我发现自己对rails项目理解极其薄弱,很多基础的编程逻辑问题答不上来。为此,我用4天多时间,将魔改大赛的作品尝试解构。希望通过解构魔改大赛的项目,真正得到技术面试官的基本认可。在后面的面试中,证明我失败了。

从10月底到11月,我总共面试了7家公司。一开始,我以为通过总结面试过程中发现的问题,进行针对性的学习与补救能找到第一份工作。但是,我越求职越学习,我的积极性越受打击。每一次面试,总能发现不足之处,面试官的问题总是回答不好,而且都是 Ruby on Rails 的基础知识。例如:

如何理解网站运行的基本概念——RMVC;

Symbol是什么?

get与post的区别?

你在项目中使用的搜索gem——ransack,如何使用,怎么理解?

......

我发现自己进入了死胡同,原地打转。 珍贵的 Ruby 实习机会

解决问题的钥匙在别处。

从10月底到11月,一个多月的时间里。我不仅仅是 Ruby 求职,更是实地调查了北京的程序员市场,明确得到几个关键信息:

北京非常缺 Ruby 工程师。 Ruby工程师是相当高工资——2万月薪是第一个薪水天花板(纯粹的提高Ruby 编程熟练度即可) 一位合格 Ruby 工程师的开发效率至少是5个合格 Java 工程师,编程语言与框架共同决定的。 Java 工程师已经市场饱和,月薪1万5就到第一个薪水天花板。 合格的 Ruby 工程师都是小全栈,数据库、后台、前端都会。 初级 Ruby 工程师技术能力相当于中级 Java 工程师。 这几个结论是解决全栈营学员顺利找到第一份 “Ruby 程序员” 工作的关键。 从这几个结论看全栈营的教学,我发现全栈营的教学是严重不完整,或者说缺失了关键的部分——大量编程基础知识的教程,尤其是各个编程语言中通用基础知识。目前,全栈营教程的版本很适合让小白快速入门编程,获得编程成就感激发兴趣,却无法让全栈营的学员再进一步。北京市场上对 “初级 Ruby 程序员” 的要求就接近 Java 中级程序员的标准,全栈营的学员离这个标准就差临门一脚就能实现。

从这个角度看,全栈营的学员最要紧的是找到 “Ruby 实习机会” 重新打磨编程技能,让自己尽快蜕变。一旦完成蜕变,一切问题就自然解决。

当我意识到这一点,立即联系所有认识的 Ruby前辈(Ruby面试时,留下认为靠谱的 Ruby 前辈联系方式),甚至在 BOSS 直聘、拉钩上也进行联系,求助一份 Ruby实习工作机会,没有工资也没关系,如果有哪位 Ruby 前辈愿意带我,交学费也 ok。我的一番努力得到了回报,瓦力工厂的 “Ruby 前辈.裴智慧” 答应给我这个机会。为此,我付出 2000 元一个月的工位费(每一个公司的工位都是有成本),计划实习 2 个月,实际实习 1 个月,因为,租房地点与实习公司距离太远(单程近2小时,往返近4小时),所以,我在实习公司附近短租一个月(额外增加近4000元开销),总实习开销 6000 元左右。

本人决定必须转行。 脱胎换骨的 Ruby 实习

实习开始前,“ Ruby 前辈.智慧兄” 就反复提醒我:从头开始学习Ruby,只跟着教程敲代码无意义,明白背后的含义才有用,不要心急,每一天学一点并坚持下来,一个月就能看到成果。前几天,我能在一周内顺利找到第一份 “Ruby 工程师” 工作,智慧兄至少一半以上的功劳。

Ruby 实习最大的难点:找到一位有耐心教你的 Ruby 前辈,很多的 Ruby前辈根本不想带新人,因为需要教大量的编程基础知识,这样教学非常的累,投入与产出严重不平衡。如果遇到一位愿意教你的 Ruby 前辈,一定要珍惜! 我很幸运的遇到了这样一位的 “Ruby 前辈”——智慧兄。

第一天实习

学习资料、自制教程与技术记录:

Rails 入门

Ruby开发文档

Rails Guides 中的 CRUD

Rails Guides 通知发布系统 CRUD 教程(基础版)

debug 神器 gem 'pry-rails'

轻量级会员系统 gem sorcery 的使用

网站运行逻辑

“ Ruby 前辈.智慧兄”,让我根据 Rails Guides 文档(Rails 官方指南,最好的 Rails 教程,没有之一),在 rails c 练习 CRUD 。在一周内,能彻底理解了 CRUD ,并且不看任何教程敲出 CRUD 代码,就算是完成了 “Rails 基本功” 。这一点非常重要,实际工作中就是如此。

在这个过程中,我也慢慢的补上当初在全栈营的基础知识。这一点需要感谢:“ Ruby 前辈.智慧兄”耐心的反复教导各种基础知识。

Ruby 实习的心得

编程初学者.有效学习方法论

初学者学习 Ruby on Rails,一定不要使用各种脚手架自动生成文件与代码简化操作,这些是编程熟手的好工具,新手的万丈深坑!!!

全栈营各位学员难以迁移魔改大赛的项目能力,跟这个直接相关!!! Ruby on Rails 初学者频繁使用脚手架,严重阻碍理解 Ruby on Rails 内部运行机制,Ruby 技术面试官许多的面试问题直接与这些相关。如果无法理解基本的 Ruby on Rails 内部运行机制,根本无法通过 Ruby 技术面试官考核。

当初,我自学 Ruby 越多,面试官回答不上了的问题更多的根本原因就在这里。

Ruby on Rails 中的脚手架:

rails g model group title:string description:text rails g controller groups 手动生成文件,更方便初学者理解 Ruby on Rails 内部运行机制。同时,避免生成大量不必要的文件,降低项目复杂度。极力推荐新手初期学习 Ruby on Rails 的半年内都手动生成文件,加速理解底层原理,提高编程技术的成长速度。当你了解 Ruby on Rails 的内部运行机制,再适当使用脚手架也不迟——磨刀不误砍柴工。

手动生成 Rails 项目文件:

rails g migration create_group touch app/controller/groups_controller.rb 面试经验总结

我面试过小公司——全栈营的线上班一期学长的创业公司;也面试过发展中公司——云拓锐联.线上教育平台项目;也面试过大公司——京东的云服务工程师。

京东的技术面试官,不仅要良好的编程思路,各种具体详细编程细节也重要(具体到某一功能的终端指令,配置文件细节等等)。北京的中小型公司技术面试官,主要考核应聘者的编程基础与解决具体问题的编程思想(Symbol 是什么?用户权限如何设计?站内信群发的数据库设计等等)。相对而言,大公司比小公司多一个 “编程细节” 考察面。

Rails 地图(非常重要!非常重要!非常重要!)

Rails 项目的运行逻辑结构 R-M-C-V。 先确定路由 Routes,这样才能确定剩下三部分的文件命名;再确定模型 Model ,相关的数据表一并建立好,明确表间关系,网站与数据库相关操作在这里(如果不涉及数据库操作,可以省略,即 R-C-V );再确定对应的控制台 Controller,网站运行代码的控制中枢,主要处理views与model的具体操作与交流;最后是用户交互页面 Views,这部分直接涉及用户体验。

Routes > Model > Controller > Views (从底层到表面;从核心到交互界面) 现在,本人实作 Rails 项目的基本顺序就是 R-M-C-V (个人推荐这款 Rails 地图)。脑中拥有完整清晰的 Rails 地图后,做 Rails 项目就心中有数,出现报错能快速确定范围。Rails 地图的顺序,可根据个体习惯修改,重要的是拥有这样的 Rails 地图。另一种 Rails 地图 R > C > V > M (Model 建立的顺序不同)

所有的 Rails 项目都是相同的运行逻辑结构。 gem 是 Rails 中非常好用的功能模块包(负责功能的代码打包成 gem 工具)。但是,大家只是根据网上找到的教程模仿使用没有太大一样,重要的是理解其中的编程思维写成一篇博客记录下来,每天一篇博客,一年下来就提升非常多了

通用项目结构(关键基础知识)

任何程序项目从核心底层到用户操作界面,可分为3层:

数据库——后台——用户操作界面 在 Rails 项目中是以下结构:

数据库——后台(model与controler)——用户操作界面(views) 数据库是任何项目当中重中之重,好的数据库设计项目就成功了一半!

项目正式运行,其他部分的代码可以根据需求进行删减与彻底更换(如果项目发展过快,项目框架性能不足,可以保留数据库更换项目框架提升性能),唯独数据库不可以轻易变动。

Model 与 Controler 协作组成了项目后台。

Rails 项目的业务处理逻辑放在这里,Controller 是 Rails 项目的控制中心负责调用各种功能;Model 是 Rails 项目处理与数据库相关的操作,拥有大量的自定义方法提供给 Controller 调用;两者协作共同组成了项目后台。程序员常说的更换项目后台,指的就是 Model 与 Controler 。

Rails 惯例——重 Model 轻 Controller,通俗解释:Controller 内的代码保持简洁体现后台逻辑,调用在 Model 中大量自定义的方法。

View 是用户操作页面。这直接与用户体验相关。前后端分离的项目中,前端工程师专门做 View 层的代码,后端工程师处理数据库与项目后台,提供 API 给前段工程师调用。

网站、安卓程序、ios 程序本质没有区别,只是 View 层不同。 所谓的跨平台项目,就是同一个数据库与项目后台作为一个整体提供 API 给不同平台的 View 调用。通俗解释:多个前端框架 ( View ) 共用同一个项目后台( Model 与 Controller )与数据库( Mysql )。

Ruby 工程师优势

Ruby 工程师——开发效率极高,多约定少配置。 一位合格的 Ruby 工程师的开发效率至少相当于 5 个 Java 工程师。Ruby on Rails 框架已将常用功能内置为默认 API ,直接使用方法名即可调用。项目中反复使用的功能代码,Ruby 工程师可以做成模块在项目各处调用。Ruby 工程师通过这样的方式,极大的简化项目代码。类似 Java 工程师将大量的时间用在的了重复出现的配置文件上,一个都不能错。

Ruby on Rails 工程师都是小全栈。 所有合格的 Ruby on Rails 工程师都是小全栈,工作2~3年后,精通uby on Rails 框架、Mysql数据库、JS、Python(跟 Ruby 极其相似)是非常正常的。而且由于一开始的全栈定位,会在工作中自然形成良好的编程全局观——优秀 CTO 的关键。积累足够的工作经验后,Ruby 工程师得到合适的机会,就能胜任项目经理甚至 CTO 职位。

在北京,优秀的 Ruby 工程师往往精通多门编程语言与技术,再加上工作中形成的编程大局观,是人才市场上绝对的香饽饽,根本不用担心工作问题。

Ruby 工程师有钱途、有前途,只要能沉下心专研学习。 第一份 Ruby 工作

我在瓦力工厂实习一个月,开始面试第五天就拿到 offer(总共 3 次面试),这其中的关键:“ Ruby 前辈.智慧兄” 专门抽出一周时间,对 Ruby 面试正对性培训——面试有技巧的,对自己的项目全方位理解,就是最靠谱的 Ruby 面试技巧,再加一点运气。

个人博客项目.技术记录

我要再次感谢 “ Ruby 前辈.智慧兄” 对我的帮助,让我顺利在春节前拿到第一份 Ruby 工作,安心回家过年。其实,要不是临近春节,我会继续实习 2 个月。那时,我完全有信心拿到 10k+ 的 offer,而不是现在的 6k 。因为,我的时间成本太高了,比其他一切成本都高。详细原因在下面的文章有详细介绍:

改变命运的机会 想学习编程与转换想小伙伴看过来

为一位靠谱的 Ruby 前辈作个小广告,本人就是在这位前辈的指导下实习培训,成功转行找到第一份编程工作。想学习编程的小伙伴可以关注一下,不敢兴趣的伙伴可以忽略——保证100%就业的编程培训班,最高保证8k~10k 的工资

培训内容:html,js,jquery,sql语句,Ruby 基础,Ruby高级,Ruby on Rails实战编程,就业指导等,

培训目标:让小白快速入门,让初学者快速提高编程能力。

培训地点:北京

教学方式:

全职班(学费9888),周一至周五学习,承诺8k~10k的工作。

兼职班(学费5888):周六周日学习学费,只承诺找到编程工作。

保证百分百就业。 备注:

如果想知道一线城市程序员的就业前景,也可以咨询下面的Ruby前辈,他是极其稀少对新人友善且耐心 Ruby前辈(对了,他是java转ruby,同时也会python)。

联系方式:添加微信,请备注(咨询编程培训班)

WechatIMG61.png 最后,祝大家早日找到称心的工作。

(赵龙,2018年2月2日晚)

作者:赵龙1043 链接:https://www.jianshu.com/p/87ad47c1c2cf 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

虽然打成Gem的富文本编辑不少,但我喜欢的一个木有。 勉强用的话,我会选ckeditor,但是它「太大,麻烦,颜值低」。

我喜欢的是这样的编辑器是长这样的:

wangeditor rubygems中有个老版本,一年多没有跟新了,给作者发邮件,提issue都没有回复。不排除加班那啥的可能。

所以,每次使用,我都得

下载js require 写html和js 心累。

一直想写自己写一个Gem,把上面的123全都躲开。 但是技能树一直没有点到,找到的教程又多是简单介绍一下,完全不肯深入,给我带来了好几次从入门到放弃的体验。 今天,放弃的所谓的「未知解释未知」,直接选择了有逼格的(不要脸的)模仿(抄袭),像吃奥利奥一样「抄一抄,改一改,点一点」,终于终于弄出了wangeditor_rails。

得到的结论就是,我不愧是一个山寨大国里面的人。没有好的教材,没有找到老师,抄袭绝逼是学习的好方法。书抄百遍,其义自见。

下面记录一下,写Gem的步骤,一来备忘,二来看看是不是有谁会搜到。

创建Gem的框架

我没有是用bundle,而是使用的rails生成Gem的框架

rails plugin new Gem的名字 使用rails生成有一个好处,它会自动在test目录生成一个dummy的rails项目并在这个项目中引用你写得Gem。

下载wangEditor.js

直接

yarn init yarn install wangeditor 填写.gemspec文件

这个文件是Gem的说明呀,git repo呀,什么的,设置一下就OK

创建生成器

生成器就是平时我们敲rails g XXX的那个东西 使用devise,simple_form的使用,我们都使用过。 创建的这个生成器的目的就是当敲入rails g wangeditor_rails:install的时候,将wangEditor.js拷贝到app/assets/javascripts中

lib/generators/wangeditor/install/install_generator.rb

module Wangeditor class InstallGenerator < Rails::Generators::Base ┆ JAVASCRIPTS_FILE = "app/assets/javascripts/wangEditor.js"

┆ sourceroot File.expandpath("../../../../../", __FILE)

┆ def copy_javascripts copy_file 'node_modules/wangeditor/release/wangEditor.js', JAVASCRIPTS_FILE ┆ end

end end 创建表单Helper

这样在代码是为了在view中使用<%= f.wangeditor :content %>

lib/wangeditor_rails/helper.rb

module WangeditorRails module Helper def wangeditor(name, method, options = {}) content = options[:object][method] id = options[:id] || "#{name}_#{method}" name = "#{name}[#{method}]"

  #puts options

  output_buffer = ActiveSupport::SafeBuffer.new
  output_buffer << hidden_area(id, content, name)
  output_buffer << display_area(id, content)
  output_buffer << javascript_tag(create_scripts(id))
end

def hidden_area(id, content, name)
  content_tag :div, text_area_tag(id, content, name: name), style: 'display: none;'
end

def display_area(id, content)
  unless content.nil?
    content = sanitize content
  end
  content_tag(:div, content, id: "#{id}_editor")
end

def create_scripts(id)
  "var E = window.wangEditor
  var editor = new E('##{id}_editor')
  editor.customConfig.onchange = function (content) {
    document.getElementById('#{id}').value = content
  }
  editor.create()"
end

end

module Builder def wangeditor(method, options = {}) @template.send("wangeditor", @object_name, method, objectify_options(options)) end end end 绑定SimpleForm调用

这样在代码是为了在view中使用<%= f.input :content, as: :wangeditor %>

lib/wangeditor_rails/simple_form.rb

module WangeditorRails module SimpleForm class WangeditorInput < ::SimpleForm::Inputs::Base def input(wrapper_options) @builder.wangeditor(attribute_name, input_html_options) end end end end

::SimpleForm::FormBuilder.map_type :wangeditor, :to => WangeditorRails::SimpleForm::WangeditorInput 在rails引用

上面写得表单方法不能直接使用,需要往rails里「注册」一下

lib/wangeditor_rails/engine.rb

require "wangeditor_rails" require "rails"

module WangeditorRails class Engine < Rails::Engine

initializer "wangeditor_rails.helper_and_builder" do
  ActiveSupport.on_load :action_view do
    ActionView::Base.send(:include, WangeditorRails::Helper)
    ActionView::Helpers::FormBuilder.send(:include, WangeditorRails::Builder)
  end
end

initializer "wangeditor_rails.simple_form" do
  require "wangeditor_rails/simple_form" if Object.const_defined?("SimpleForm")
end

end end 在Gem核心文件中引用

lib/wangeditor_rails.rb

require 'wangeditor_rails/engine' require 'wangeditor_rails/helper'

module WangeditorRails end OVER

作者:imtinge 链接:https://www.jianshu.com/p/bc0195da2246 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

编辑器gem 撰写的一个方法: https://www.jianshu.com/p/bc0195da2246 https://github.com/imtinge/wangeditor_rails

how to create a simple jobs board in ruby on rails https://medium.com/@riklomas/how-to-create-a-simple-jobs-board-in-ruby-on-rails-even-if-youve-never-coded-before-9b296c4df483

4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 4 天前 什么是拜占庭将军问题 接触区块链的同学,多少都听说过拜占庭将军问题,经常看到或听到某某区块链使用某某算法解决了拜占庭将军问题,那么究竟什么是拜占庭将军问题呢? 什么是拜占庭将军问题 也被称为“拜占庭容错”...

1

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 9 天前 智能合约语言 Solidity 教程系列7 - 以太单位及时间单位 这是Solidity教程系列文章第7篇介绍以太单位及时间单位,系列带你全面深入理解Solidity语言。 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不...

1

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 13 天前 实现一个可管理、增发、兑换、冻结等高级功能的代币 本文主要介绍代币高级功能的实现: 代币管理、代币增发、代币兑换、资产冻结、Gas自动补充。 写在前面 在上一篇:一步步教你创建自己的数字货币(代币)进行ICO中我们实现一个最基本功能的代币,本...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 20 天前 一步步教你创建自己的数字货币(代币)进行ICO 本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太...

4

1 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 28 天前 一步步教你开发、部署第一个Dapp应用:宠物商店 今天我们来编写一个完整的去中心化应用(Dapps), 可以和编写智能合约结合起来看。 写在前面 阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 除此之外,...

7

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 1 月前 智能合约语言 Solidity 教程系列6 - 结构体与映射 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版本:0.4...

2

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 1 月前 Solidity 教程系列5 - 数组介绍 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本文前半部分是参考Solidity官方文档(当前最新版本:0.4.20)...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 1 月前 Solidity 教程系列4 - 数据存储位置分析 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 这部分的内容官方英文文档讲的不是很透,因此我在参考Solid...

3

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 1 月前 Solidity教程系列3 - 函数类型 Solidity教程系列第三篇 - Solidity函数类型介绍。 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 本文前半部分...

5

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 Solidity 教程系列2 - 地址类型介绍 Solidity 教程系列第二篇 - Solidity 地址类型介绍. 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 本文前半部分...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 比特币如何达成共识 - 最长链的选择 比特币没有中心机构,几乎所有的完整节点都有一份公共总帐本,那么大家如何达成共识:确认哪一份才是公认权威的总账本呢? 为什么要遵守协议 这其实是一个经济问题,在经济活动中的每个人都是自...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 Solidity 教程系列1 - 类型介绍 引言 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么。 Solidity 语法的介绍会是一系列文章,本文是第一篇:介绍 Solidity ...

5

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 Geth 控制台使用及 Web3.js 使用实战 在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3。 Geth控制台(REPL)实现了所有的web3 API及Admin API,使用好Geth就是必修课。结合Geth命令用法阅读效果更佳。 写在前面 阅读本文之前...

3

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 以太坊客户端 Geth 命令用法-参数详解 Geth 在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。 熟悉 Geth 可以让我们有更好的效率,大家可收藏起来作为 Geth 命令用法手册。 本文主要是对 geth help 的翻译,基...

3

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 智能合约开发环境搭建及 Hello World 合约 如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。 就先学习任何编程语言一样,入门的第一个程序都是Hello World。今天我们来一步一步从搭建以太坊智能...

3

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 以太坊是什么 - 以太坊开发入门指南 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及的各晦涩的概念,轻松带大家入门。 以太坊是什么 以太坊(Ethereu...

5

1 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 2 月前 非对称加密技术- RSA算法数学原理分析 非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。 但是对于...

2

2 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 比特币脚本及交易分析 - 智能合约雏形 大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200。 在比特币区块链中,交易不是这么简单,交易实际是通过脚本来完成,以承载更多的功能个,这也是为什么比特币被称为是一种...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 比特币区块结构 Merkle 树及简单支付验证分析 在比特币网络中,不是每个节点都有能力储存完整的区块链数据,受限于存储空间的的限制,很多节点是以SPV(Simplified Payment Verification简单支付验证)钱包接入比特币网络,通过简单支付验证可以在不必...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 分析比特币网络:一种去中心化、点对点的网络架构 比特币采用了基于互联网的点对点(P2P:peer-to-peer)分布式网络架构。 比特币网络可以认为是按照比特币P2P协议运行的一系列节点的集合。 本文来分析下比特币网络,了解它跟传统中心化网络的区别,以...

4

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 比特币如何挖矿(挖矿原理)-工作量证明 在区块链记账原理 一篇,我们了解到记账是把交易记录、交易时间、账本序号、上一个Hash值等信息计算Hash打包的过程。 我们知道所有的计算和存贮是需要消耗计算机资源的,既然要付出成本,那节点为...

2

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 比特币所有权及隐私问题-非对称加密应用 比特币系统是如何确定某个账户的比特币是属于谁的?谁可以支付这个账户比特币? 如果你对这个问题还不是很明白,那就一起来看看吧。 银行系统 我们先来回顾下现实的银行系统: 1. 首先我们需要把...

3

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 区块链记账原理 区块链(1.0)是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。 通常认为与智能合约相结合的区块链为区块链2.0, 如以太坊是典型的区块链2.0 很多人只了解过比特币,不知道区块链...

3

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 用Python从零开始创建区块链 本文主要内容翻译自Learn Blockchains by Building One 作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链。 对数字货币的崛起感到新奇的我们,并且想知道其背后的技...

5

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 Dae04912e733dd7bb7e5245d81b4ba5f 前言-如何学习区块链 区块链未来3到5年应该会出现行业井喷式发展,相应所需的人才必定水涨船高,每一个开发人员都不应该错过这样的机会。 区块链涉及的技术很多,很多开发人员看了一些资料后,感觉好像懂了,又好像...

5

0 4fcf8ab95b74375af94f7878a3a8d2b9 Tiny熊 3 月前 比特币是什么 对于比特币也许一千个人有一千种理解。本文作为入门篇(写给完全没有了解过比特币概念的新手,老手可忽略),我尽量用简单易懂的语言来介绍比特币。 到底什么是比特币,它到底是怎么运行的。 通...

results matching ""

    No results matching ""