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