Ruby China
  • 社区
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • 注册
  • 登录
spike76
@spike76
会员
第 33805 位会员 / 2017-12-19

[email protected]
5 篇帖子 / 268 条回帖
14 关注者
2 正在关注
91 收藏
Read the god damn error message!
未设置 GitHub 信息。
  • 概况
  • 话题
  • 回帖
  • 收藏
  • 正在关注
  • 关注者
  • 类 extend module 后,类变量的查询问题 at 2020年03月17日

    居然行了,但是想不通原因

  • 不踩 N+1 获取多对多中间表字段 at 2020年03月03日

    额😂 ,我想错模型了

  • 不踩 N+1 获取多对多中间表字段 at 2020年03月03日

    一楼的想法和我一样。应该把中间表作为查询的主表。

    我注意到另一个问题,最开始@topics = @user.topics,这里查出的所有的 topic 是@user的了,那么视图中 topic.topic_users 查出来的结果自然也应该是@user的,为什么还需要 with_user(@user.id) 来再次限定。我在想去掉这个 with_user 后,配合原来的 includes 会不会还有 N+1

  • 在数组的循环内删除数组元素的问题? at 2020年02月23日

    同意楼上。不建议在遍历过程中改变原数组的长度

  • 如何进入服务器上次启动的 rails console at 2020年01月20日

    screen -S xxx 创建具名终端,进入该终端进行操作,相当于在后台启动了一个终端。即使 ssh 断开,重新连接后使用 screen -r xxx 进入原具名终端

  • 怎么单独让某个路由不校验 CSRF token at 2020年01月08日

    估计你想要所有的 api 请求跳过 csrf 验证,建议抽一个 api 的 base 类,在其中直接skip_before_action :verify_authenticity_token,所有 api 相关 controller 继承这个类

  • 不懂用了 array dup 和 map 的代码里面有个出乎意料的结果 at 2019年12月27日

    浅拷贝

  • 在 Ruby 中实现一个信号订阅通知功能 (一) at 2019年12月15日

    这就是个观察者模式撒,ruby 标准库不是提供了 observable 模块么。你的 emit_signal 接口对应的就是库里的 notify_observers 方法,再在订阅者里调用 add_observer 并实现 update 方法就完事了撒

  • Ruby 2.7 的新功能 at 2019年12月06日

    tally 确实挺强大,少些好多代码。

    我倒是挺喜欢 Numbered Parameters,以前就在想怎么把[1, 2].map { |ele| ele + 1 }写短一点

  • 不是很懂 undef 怎么用 at 2019年11月28日

    Heval.class_eval { undef :f }

  • 请教大大一个 Ruby 类继承的问题 at 2019年11月20日

    看 api 文档:default_scope(scope = nil, &block)

  • =等于号是对象的什么方法? at 2019年11月14日

    单纯的赋值符不是方法

  • rails console 抛出 "\x9C" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) at 2019年11月05日

    试试 force_encoding('utf-8')

  • 一直没弄懂的一个地方,String === String 恒返回 false? at 2019年10月10日

    你想看对应的 C 实现,也要先找对文档嘛。String===String 实际调用的是 Module 中的===,不是 Object 的===

  • [求解] 奇怪的异常: find_or_create_by! at 2019年10月10日

    没有什么奇怪的,仔细看 sql。

    你第一次执行的时候,存入的 receive_permissions 是序列化的数组,而第二次查询时,receive_permissions: ["country", "high_end"],sql 实际是个 in 语句:"emails"."receive_permissions" IN ('country', 'high_end'),自然就找不到上一次存入的记录。接下来就会执行 create,然而 code 和 title 的 validation 没有通过,自然就报错了

  • erb 模板中的注释能否使用 proc 包装,达到快速注释的目的 at 2019年09月02日

    你不如直接用 if false

  • 1 对多的关系如何只显示 1 条记录 at 2019年08月16日

    eager_load 本来就是为了取代你第一行里的 left_joins 的。你这种写法,相当于 join 了两次,有点看不懂。 eager_load 自身的 select 语句会拼接到你指定的 select 语句后,所以会查出所有的字段

  • 1 对多的关系如何只显示 1 条记录 at 2019年08月15日

    不会有 n+1,每个 user 已经加载了 books,user.books 不会执行 sql

  • 1 对多的关系如何只显示 1 条记录 at 2019年08月15日
    User.eager_load(:books).ransack({:books_id_in=>params[:book_ids]}).map { |u| {username: u.name, book_names: u.books.map(&:name).join(',')} }
    

    试试嘞。 不过这种数据拼装我一般不会在 controller 中处理

  • 有谁考虑过在 has_many 多对多关联时的分成问题吗? at 2019年08月02日

    有啥问题,你把中间表看做有业务意义的表就行了

  • 有谁考虑过在 has_many 多对多关联时的分成问题吗? at 2019年08月02日

    一楼给出了正确答案。我公司的项目就是这么干的

  • 在画 Ruby 对象继承关系图时没想通 Kernel singleton_methods 存在的目的还有使用场景,求指点! at 2019年07月09日

    其实你在顶级作用域中定义的方法,不能算是 main 对象的单例方法,在 main 中执行self.singleton_methods,结果其实不包含自定义的方法。这个方法其实成为了 Object 类的私有方法,这是 ruby 中实现全局函数的一种形式 (只能用省略 self 的形式去调用,调用的时候看起来像是函数)。

    细想了一下,在 Class 类及其祖先中定义的实例方法均能实现全局静态函数的效果,当时是想得简单了。

  • 在画 Ruby 对象继承关系图时没想通 Kernel singleton_methods 存在的目的还有使用场景,求指点! at 2019年07月09日

    在 Module 类中定义的实例方法会成为所有类以及模块的类方法,不知道是不是你要的效果

    class Module
      def foo
        p 'spike'
      end
    end
    BasicObject.foo # 'spike'
    
  • 在画 Ruby 对象继承关系图时没想通 Kernel singleton_methods 存在的目的还有使用场景,求指点! at 2019年07月08日

    如果你想给 Kernel 打补丁并输出一些调试信息,类似于module Kernel; p @@spike;end,要是 Kernel 没有 p 这样的单例方法,你该咋整嘞。怕是只有 extend self 咯

  • 微信小程序向 Rails 应用发送 POST 请求时报错 InvalidAuthenticityToken at 2019年06月29日

    好奇你是怎么单独拿到 token 的。如果你从其他表单中提取 token,就会有问题

  • 各位大佬,求教 ntlm 用户批量验证问题 at 2019年02月22日

    请贴代码。

  • 是否可改造成递归方法 at 2019年02月21日

    不忍细看你的代码。 没用递归,逐层循环的方式如下,没有测试,可能有错

    def get_all_subs
      ids = [id]
      ids.each do |id|
        sub_ids = id.to_employee.all_sub_ids
        ids.push(*sub_ids) if sub_ids.present?
      end
      return ids
    end
    
  • 数组变量重新接受赋值后 object_id 改变 at 2019年02月16日

    对哦,搞错 slice! 的副作用了。那就用两次 slice!

    a.tap{|arr| arr.slice!((n + m)..-1)}.tap{|arr| arr.slice!(0, n)}.push(*b[n,m])
    

    其实直接用 keep_if 或者 delete! 看起来更简单

    a.keep_if.with_index {|_, idx| idx >= n && idx < (n + m)}.push(*b[n,m])
    
  • 填字游戏 at 2019年02月15日
    p '0'
    require 'active_support/concern'
    p '1'
    module C
      p '2'
      extend ActiveSupport::Concern
      p '3'
      included do
        p '100'
      end
      p '4'
    end
    p '5'
    module B
      p '6'
      extend ActiveSupport::Concern
      p '7'
      include C
      p '8'
      included do
        p '101'
      end
      p '9'
    end
    p '10'
    class A
      p '11'
      include B
      p '102'
      def hello
        p '200'
      end
      p '103'
    end
    p '104'
    A.new.hello
    p '1000'
    

    意外的调了一次。。

  • 数组变量重新接受赋值后 object_id 改变 at 2019年02月15日

    Array 的 + 方法返回的是新对象,对象 id 当然会变。

    你写的解决方法是 OK 的,我不明白为什么处理a[n, m] + b[n, m]会麻烦:

    a.slice!(n,m)
    a.push(*b[n,m])
    
  • 上一页
  • 1
  • 2
  • …
  • 6
  • 7
  • 8
  • 9
  • 下一页
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English