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) }
루비는 이전 스타일의 람다를 더 이상 사용하지 않았으므로, 사용하는 것이 더 편하다고 생각한다면 꼭 사용하십시오.
나는 개인적으로 스테이 비 람다의 구문을 좋아하지 않지만 결국에는 표준이 될 것이므로 익숙해지지 않을 것입니다.
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.
클래스 메소드보다 람다와 함께 범위를 사용할 이유가 없습니다. 개인적인 취향의 문제입니다. 그러나 지침을 따르려면 인수가 포함될 때 클래스 메소드를 사용해야합니다.
참고 URL : https://stackoverflow.com/questions/16588077/scopes-with-lambda-and-arguments-in-rails-4-style
'programing tip' 카테고리의 다른 글
각 루프에서 jquery를 계속 사용하는 방법 (0) | 2020.06.20 |
---|---|
파이썬의`s =“hello, % s에 해당하는 Ruby는 무엇입니까? (0) | 2020.06.20 |
Ubuntu EC2 인스턴스에 EBS 추가 (0) | 2020.06.20 |
배열이 다른 배열의 부분 집합인지 확인 (0) | 2020.06.20 |
ID가 다른 테이블과 일치하지 않는 SQL 행 삭제 (0) | 2020.06.20 |