147

Rails 4で次のことがどのように行われるのか、または3と同じように4で引数を渡すことができるラムダを使用するためにRails 3アプローチを使用するだけなのか疑問に思っています.

私は Rails 3 にかなり慣れていないので、Rails 4 を実行するいくつかのサンプルに取り組んでいます。

ここに私のRails 3コードがあります:

class Person < ActiveRecord::Base
  scope :find_lazy, lambda {|id| where(:id => id)}
end

# In console I can call
Person.find_lazy(1)

これがRails 4の方法なら -> {} を使うことで、それはラムダですよね? scope :all_lazy, -> { select("*") }議論が必要な場合はどうなりますか。いくつかの異なるアイデアを試してみましたが、-> {} を使用するとコンソールに引数エラーが表示されます。

4

6 に答える 6

313

私はそれがあるべきだと思います:

scope :find_lazy, -> (id) { where(id: id) }
于 2013-05-16T13:03:38.310 に答える
11

Ruby は古いスタイルのラムダも廃止していません。

私は個人的にスタビーラムダの構文が好きではありませんが、最終的にはおそらく標準になるので、慣れるのに問題はありません。

于 2013-08-09T19:36:12.310 に答える
8

Rails 4では、次のことができます:

scope :find_lazy, -> (id) { where(id: id) }

それは古いルビーにありました:

:id => id

より良いハッシュ:

id: id
于 2015-11-27T13:03:44.483 に答える
2

関連付けをサポートするには:

scope :find_lazy, -> (object) { where(object_id: object.id) }
于 2015-12-03T13:40:02.157 に答える