• 测试 at 2018年07月02日

    不用。反斜杠是 Ruby 表示字符串时自己加上去的,不是 json 里的

  • Gemfile 文件的细节问题 at 2018年07月02日

    👍 谢谢提醒,上面是打错了,已修改

  • Gemfile 文件的细节问题 at 2018年07月01日

    上面说 >= 始终安装最新版的说法,是基于“gem 安装是尽量找符合条件版本里的最新版本安装”这个前提的。

    上面 gem 'rails', '~> 5.0.0', '>= 5.0.0.1' 的解释: 允许符合 [5.0.0.1, 5.1.0) 这个区间类的任何版本,如果没有其他依赖的限制,会安装 5.0.0.x 的最新版本

  • Rails 的 incrementincrement! 了解一下

  • 有本书 Rebuilding Rails,整书实现一个微型 Rails 框架,里面有很多对 Rails 已有组件源码的解释和导读,你可以先看下这本书起

  • 我上面没有在实例方法(new.instance_eval)里面调用类方法(before_save)啊,上面都是在 C 类环境里面操作。

    当然要实现实例方法里调用类方法也是可以的,这是另一个问题。

  • 测试 at 2018年06月27日

    上面的是一种思路,我再给你提一种:

    # 后台
    @subscribe = JSON.parse(resp.body, object_class: OpenStruct).subscribes
    

    前台什么都不用改,你试试。

    原理就是按照你前台访问的形式你其实希望得到的是一个类似 OpenStruct 的对象,在后台构建出这种对象就行了。

  • 如果 before_save 方法把接收到的块存下来了,最后调用时修改了当前环境(回调方法里,改成了实例环境),则调用时,self 的值就会和创建时不一样了。例子:

    class C
      @block = nil
    
      def self.before_save(&block)
        @block = block
      end
    
      before_save { puts self }
    
      @block.call # => C
      new.instance_eval(&@block) # => <C:0x00007fa3c41810b8>
    end
    

    即 block 的当前环境 (self) 在调用的时候是可以改的。

  • 关于 Rails Enum 的疑问 at 2018年06月25日

    def self.class_methods ... 就行了,你没搞清类里的作用域问题

  • 看到了,谢谢

  • 好的,谢谢。

  • @jasl 请教个问题,Rails Guides 里面有些文章没有在菜单中显示出来的,比如 http://guides.rubyonrails.org/active_model_basics.html,你是在哪翻出来的?

  • Rails 中的类加载机制 at 2018年06月01日

    请问大家,常见误区里的 nesting 和 autoload 矛盾 有什么好的解决方案吗?

  • Awesome Ruby China at 2018年05月24日

    大三开始学 Ruby,最近也开始看精华帖了,我是上下班的路上看的,刚看完一半,楼主收集的很棒 👏

  • 关于 5 楼的问题

    class C
      @a 
    end
    

    以及

    class C
      def self.m
        @a 
      end
    end
    

    中的实例变量 @a 是类单例类(C 的 singleton_class)的实例变量,不是 C 的实例变量,与 C 实例变量拥有不同的作用域,可以搜索 ruby singleton class。

    下面才是 C 这个类的实例变量

    class C
      def m
        @a 
      end
    end
    
  • 寫 RoR 的人要求特別高? at 2018年03月20日

    同意,看来楼上的都是大神😏

  • 新增 “挖坟” 列表 at 2018年03月17日

    管理员辛苦了。

    我建议把包括老帖子的列表和不包括老帖子列表看做成用户偏好习惯,在用户主页里设置。

    然后可以新增一个专门用来只看挖坟贴的列表。

  • Stimulus 框架简介 at 2018年02月25日

    可以理解为,Stimulus 规范了 Rails 中的前端代码,是 ujs 的增强版吗?

  • 我是先全部过一遍,之后遇到问题,再回到那些模糊的知识点里回顾。有些不太好理解的地方,有时也反复翻了好多遍现在才记下来

  • 第一个问题看我 #6 提到的文档解决; 第二个是因为这种路由方法是动态方法,文档不好查。edit_sport_activity_path 需要 sport、activity 两个参数,和 edit_activity_path 需要 activity 一个参数的问题,这个是 Rails 默认对资源的约定,记下来就好了。

    最系统、最好用的资源就是Rails Guides 中文

  • 你这个是不是编辑页已经没问题,然后点保存的时候出的问题?根据报错信息,你想用 form_for @activity 这个 helper 的话,要在路由中加一句 resources :activities 才行

  • 因为,edit_sport_activity_path(sport_id, activity_id) 方法第二个参数才是 activity_id。所以你的 view 中改成 edit_sport_activity_path(@sport, a) 就行了。

    这里 @sport 这个参数没有什么意义,但也要留一个占位,如果想修改 activity 不传这个参数,可以在路由中生成 edit_activity_path 方法,按照这里的文档设置 route:http://guides.rubyonrails.org/routing.html#shallow-nesting

  • 嗯嗯,是要考虑。关于产品体验,还有很多东西要学习,受教了👍

  • 关于 inject, 疑惑的地方. at 2018年02月03日

    看一遍 inject 的文档就知道了 http://devdocs.io/#q=ruby+inject

    或者可以看我这篇里的解释 https://ruby-china.org/topics/34620#inject/reduce

  • 😂 没有,不是产品的事,是项目自己加上的小功能。听你们这么说了,这个东西好像没什么意义。下次解决问题前我会先考虑需求是不是值得的问题😂

  • 就是想在按钮 disabled 期间给用户一个反馈

  • 举例中的不是实际需求。这里的目的就是为整个项目所有的异步请求统一加一个进行中的提示,这个提示可以加在底部或者右上角。你说的特殊情况,特殊处理,不让事件传播到这里处理就行。

  • 你说的对,要添加一个全局计数器,来处理多请求的问题:

    $(function() {
      var ajaxSendCount = 0;
      $(document).on('ajax:send', function(event, jqXHR) {
        if (!$("#loading").is(":visible")) {
          ajaxSendCount = 0;
          // 加载异步请求动画
          $("#loading").show();
        }
        ajaxSendCount++;
        jqXHR.always(function() {
          ajaxSendCount--;
          if (count <= 0) {
            // 清除异步请求动画
            $("#loading").hide();
          }
        });
      });
    });
    
  • 加载动画是全局的。

    一个操作触发请求多个后台?Rails 应用中还没遇到过这个需求。的确,你说的对,这里解决的粒度是单个异步请求,你说的情况处理不了。但这类需求可以放到 js 中使用 ajax 的 Local Events 单独处理,记得处理完后阻止一下事件传播就行(不要让全局事件再处理一遍了)。

    你说的任务列表大概是怎么处理的,会不会把事情搞复杂了?

  • 支持