[ruby-on-rails-4] Rails 4 스타일의 람다와 인수가있는 범위?

Rails 4에서 다음이 어떻게 수행되는지 궁금합니다. 또는 Rails 3 접근법을 사용하여 람다를 사용하여 인수를 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("*") }인수가 필요한 경우 어떻게합니까? -> {}을 사용할 때 몇 가지 다른 아이디어를 시도하고 콘솔에서 인수 오류가 발생합니다.



답변

나는 그것이 있어야한다고 생각합니다 :

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


답변

루비는 이전 스타일의 람다를 더 이상 사용하지 않았으므로, 사용하는 것이 더 편하다고 느끼면 꼭 사용하십시오.

a

나는 개인적으로 스테이 비 람다의 구문을 좋아하지 않지만 결국에는 표준이 될 것이므로 익숙해지지 않을 것입니다.


답변

Rails 4를 통해 다음을 수행 할 수 있습니다.

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

그것은 오래된 루비에있었습니다.

:id => id

더 나은 해시 :

id: id


답변

나는 보통 아래 프로그래밍 구문을 사용하고 있었다.

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

그러나 Codacy를 사용하여 코드를 검토 할 때이 구문에 대해 경고하는 것을 발견했습니다.

Use the `lambda` method for multiline lambdas.

나는 그것을 변경했고 잘 작동했다.

  scope :find_lazy, lambda {|id|
    where(id: id)
  }


답변

연결을 지원하려면

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


답변

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

와 동등하다

self.find_lazy(id)
  where(id: id)
end

루비 온 레일 가이드를 기반으로 :Using a class method is the preferred way to accept arguments for scopes.

클래스 메소드보다 람다와 함께 범위를 사용하는 이유는 없습니다. 개인적인 취향의 문제입니다. 그러나 지침을 따르려면 인수가 포함될 때 클래스 메소드를 사용해야합니다.


답변


댓글 달기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다