小编Sub*_*dra的帖子

Ruby on Rails ActiveRecord范围与类方法

Rails在内部将范围转换为类方法,那么为什么我们不能自己使用类方法而不是使用范围.

ruby ruby-on-rails rails-activerecord

14
推荐指数
2
解决办法
4948
查看次数

使用Symbol vs String作为params散列中的键的Rails

如果我们使用字符串作为哈希键,Ruby需要评估字符串并查看其内容(并计算其上的哈希函数)并将结果与​​已存储在哈希中的键的(哈希)值进行比较.

如果我们使用一个符号作为Hash键,它隐含着它是不可变的,所以Ruby基本上只是将object-id的(哈希函数)与已经存储在其中的键的(哈希)对象-id进行比较.哈希.(快多了).

但事情是在Rails params中的实例HashWithIndifferentAccess,如果我们写params[:some_key]它转换:some_key'some_key'然后它试图寻找params散列中的键. 第159行

 def convert_key(key)
    key.kind_of?(Symbol) ? key.to_s : key
  end
Run Code Online (Sandbox Code Playgroud)

因此,如果在Hash HashWithIndifferentAccess中将String作为键,查找速度很慢,为什么将符号键转换为字符串.

ruby hash ruby-on-rails

8
推荐指数
1
解决办法
1382
查看次数

Ruby on Rails基于参数的实例变量缓存

我将用户杂项数据存储在user_data表中,当我使用我定义的关联检索该数据时,我实际上是使用像这样的Ruby实例变量缓存来缓存它.

def user_data(user_id)
  @user_data || = User.find(user_id).data 
end
Run Code Online (Sandbox Code Playgroud)

但实例变量@user_data只会在第一次为nil时分配值,一旦它为用户保存数据,就让user_id等于1,当我在这个方法中传递user_id 2时,它返回user_id 1的数据,因为它不会为它分配新值所以我的问题是我如何根据函数的参数缓存它的值.

ruby-on-rails

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

update_all 之后 Rails Elastic Search 重新索引数据

我正在使用 Searchkick 与我的 Rails 应用程序中的弹性搜索 api 进行交互,并且它几乎在所有情况下都能正常工作,但我面临的问题是我的模型中有状态字段,并且通过选择所有复选框,用户可以更改所有记录的状态,因此我使用它更新数据,update_all不会触发任何回调,并通过after_commit回调重新索引数据。因为我的数据没有以reindexed这种方式进入 Elastic Search,所以它给出了相同的结果,我应该做什么,Model.reindex手动调用是一个不错的选择吗?

ruby-on-rails elasticsearch searchkick

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

Ruby on Rails实例与类方法

我研究了Ruby类,实例方法和我发现的主要区别之间的主要区别是我们不需要创建该类的实例,我们可以直接在类名上直接调用该方法.

class Notifier 

def reminder_to_unconfirmed_user(user)
    headers['X-SMTPAPI'] = '{"category": "confirmation_reminder"}'
    @user = user
    mail(:to => @user["email"], :subject => "confirmation instructions reminder")
  end

end
Run Code Online (Sandbox Code Playgroud)

所以,在这里我reminder_to_unconfirmed_user在我的Notifier类中定义了实例方法,以便向未经证实的用户发送电子邮件,当我运行Notifier.reminder_to_unconfirmed_user(User.last)它时,如果它是实例方法而不是类方法则调用它.

ruby ruby-on-rails

3
推荐指数
1
解决办法
1113
查看次数

使用Ecto Phoenix获取今天创建的记录的最佳方式?

来自Rails Active Record我想知道如何实际获取今天创建的记录.

在Rails中我们可以这样做

User.where(created_at:Date.today.beginning_of_day..Date.today.end_of_day)
Run Code Online (Sandbox Code Playgroud)

或者说得很简洁

scope :created_today, ->(date = Date.today) { where(created_at: date..date.end_of_day) }

User.created_today
Run Code Online (Sandbox Code Playgroud)

用Ecto实现同样的东西最好的方法是什么?

elixir ecto phoenix-framework

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

Rails after_save和after_commit回调

我在rails中经历了after_save和after_commit回调的不同之处,我发现主要区别是在创建和更新时调用了after_commit,有没有办法只在create上调用after_commit?

ruby ruby-on-rails

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