小编the*_*ing的帖子

ActiveRecord::Store 包含取自另一个表的字段名

假设我在 HR 系统中有两个模型:人员和字段。我想允许系统用户通过为其创建一个字段来向 Person 模型添加自定义属性。所以我的 Person 模型将包含一行类似

class Person < ActiveRecord::Base
  store :fields, accessors: Field.all.pluck(:name), coder: JSON
end
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,因为该类被缓存,因此不会添加新字段。通常我会使用 Proc 或 lambda,但这在这里不起作用。
有没有一个不依赖添加 gem 的简单解决方案来解决这个问题?我可以在不使用 ActiveRecord Store 并使用序列化列的情况下执行此操作,但保留进行验证和跟踪属性更改的能力吗?

activerecord ruby-on-rails

5
推荐指数
1
解决办法
104
查看次数

查找从数组中抽取的所有数字的总和为16

我想从[2,3,4,5,6,7,8]中找到拔除3、4或5个数字的所有排列,允许重复,这样它们的总和为16。所以[8,5,3 ],[8,3,5]和[4,3,3,3,3]是有效的排列。同样,也应删除循环排列,以使[3,3,3,3,4]也不会添加到答案中。我可以在Ruby中执行此操作,而无需允许这样的重复:

d = [2,3,4,5,6,7,8]
number_of_divisions = [3,4,5]
number_of_divisions.collect do |n|
  d.permutation(n).to_a.reject do |p|
    p[0..n].inject(0) { |sum,x| sum + x } != 16
  end
end
Run Code Online (Sandbox Code Playgroud)

如何允许重复,以便包含[3,3,3,3,4]?

ruby arrays circular-permutations

2
推荐指数
1
解决办法
252
查看次数

Rails缓存:陈旧?始终在开发中返回true

hawkins.io在我一个人的模型,我有:

def self.cache_key
   Digest::MD5.hexdigest "#{maximum(:updated_at)}.try(:to_i)-#{count}"
end
Run Code Online (Sandbox Code Playgroud)

我正在使用Pundit进行授权.所以在我的人员控制器中,我有:

def show
    @person = Person.find(params[:id])
    if authorize @person
      if stale? @person
        @person = Person.basic_details.last_details.find(params[:id]).decorate
        @person_histories = PersonHistory.new(person_id: @person.id).results
        respond_with @person
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

在我的development.rb环境中:

config.cache_store = :file_store, Rails.root.join('tmp', 'cache'), { expires_in: 4.hours }
config.consider_all_requests_local       = true
config.action_controller.perform_caching = true
Run Code Online (Sandbox Code Playgroud)

(我在Windows上这里,所以没有memcached等设置).

当我重新加载人物节目视图,加载后立即,我希望它完全缓存.然而,它重新查询数据库等等.是否有一个设置或我缺少的东西?当我检查缓存键时它们是相同的,但stale? @person总是看起来返回true.

caching ruby-on-rails

0
推荐指数
1
解决办法
522
查看次数