void
rb_p(VALUE obj) /* for debug print within C code */
{
VALUE str = rb_obj_as_string(rb_inspect(obj)); // 将对象转换为字符串
if (TYPE(rb_stdout) == T_FILE &&
rb_method_basic_definition_p(CLASS_OF(rb_stdout), id_write)) {
io_write(rb_stdout, str, 1);
io_write(rb_stdout, rb_default_rs, 0);
}
else {
rb_io_write(rb_stdout, str);
rb_io_write(rb_stdout, rb_default_rs);
}
}
VALUE
rb_obj_as_string(VALUE obj)
{
VALUE str;
if (TYPE(obj) == T_STRING) { // 如果已经是字符串就直接返回
return obj;
}
str = rb_funcall(obj, id_to_s, 0);
if (TYPE(str) != T_STRING)
return rb_any_to_s(obj);
if (OBJ_TAINTED(obj)) OBJ_TAINT(str);
return str;
}
p Obj 和 p Obj.inspect 区别是前面如果不是 String,就会调用 to_s 后输出,后面已经是 String 了,就直接输出
http://apidock.com/ruby/Kernel/p 下面还有源码,更多就是翻 ruby 源码了。
#6 楼 @zhouhong_135 git 里面 commit 就代表一个时间点。
假设有个 commit 的 hash 是 d2d44b6
取出该 commit 的所有代码(放到新分支 backup)
git checkout -b backup d2d44b6
取出该 commit 的 Gemfile 文件,放到当前分支
git checkout d2d44b6 Gemfile
回滚到该 commit,放弃该 commit 之后的所有修改
git reset --hard d2d44b6
如果你给这个 commit 加上 tag 命名,就把 tag name 替换到前面 hash 的位置。
tag 指向 commit,commit 指向 index,index 指向这个 commit 点的所有文件。所以 tag 可以指代这个 commit 点的所有代码。
或者我没理解楼主的意思,给代码打标记是来源哪个工具的概念?
erb 本来就是模板。
解析 class Fruit 的时候,其实都是打开 Fruit 这个域。两种写法一样。
鉴于 Ruby 部署确实麻烦,我看好 SaaS,像 37signals 那样。
#3 楼 @blacktulip 我看糊涂了。
不用 assets pipeline 的话,版本控制 commit 进去很多不是自己的代码会不爽。
Blog.paginate(:page => params[:page]).group_by(&:blog_year_id)
http://apidock.com/rails/Enumerable/group_by
赞同 #2 楼 @blacktulip
blog_year.blogs.paginate(:page => params[:page])
问题一二都跟 Rails 无关。
问题二把编译出的 html 贴出来,看看是不是 bug。
我看了 bootstrap 文档,caret 的层级关系应该是
a.dropdown-toggle
span.caret
你贴的代码错了。
额外说句,网上看到的所谓最佳实践都只是一家之言。
做东西。
1 看看 users 表是不是真的有 admin 字段了
2 因为 attr_accessible 没有 admin,我觉得应该会抛 mass-assignment 错误。
泪目,看得出我 2012 年啥都没干,今年要加油。
http://book.douban.com/subject/10528446/ 右边 在哪儿买这本书?
不过第 4 版的翻译和排版都不能令人满意,而且 3.0.5 比起最新 Rails 版本又落后不少,英文无障碍的推荐买原版电子书 http://pragprog.com/book/rails4/agile-web-development-with-rails
不要发布盗版资源,我编辑掉了。
我觉得不用解决。
mail 这个 gem,smtp 协议。
15 分钟 demo 已经很久不提了,最新是 Rails is Omakase,早前是 Rails is not for beginers.
这下是代码注入了,比较严重。
#5 楼 @dreamable 首先,慎用继承,如果 model 或者 contorller 有重复的代码,可以抽取 Concern http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
然后,Model 用了继承,Controller 不一定要继承,像 Ruby China 的消息通知(https://github.com/ruby-china/ruby-china/tree/master/app/models/notification)继承了同一个 model,但是 Controller 用的是同一个,一致的 read, destroy 行为。继承本来不就是让他们表现一样的行为么?消息通知用继承的原因是希望各类消息存在同一个集合。
至于 View,if 处理没问题,或者像 Ruby China 这样利用局部模板
<%= render :partial => "notifications/#{notification.class.name.underscore}", :locals => {:notification => notification} %>
第一种方式是已经被废弃的 rjs 代码,没有 page.replace_html 这个方法了,所以是跑不通的。
为了使用继承而使用继承?
这是前端逻辑,用 javascript 实现。
传统出版的弊端,每次印刷有个印量,根据销售情况加印。但在技术类书上,除非是热门书,不然都不会卖得很快,慢慢的后来的人就买不到了,出版社也不会加印。