모델의 자기를 참조해야합니다 : has_many 선언."self"를 연관 선언에 사용하십시오 (: has_many, : has hasone)
나는 Foo라고 부르는 클래스가 있습니다. 푸 : has_many 모음. Foo에는 : has_many 관계에있는 Bars의 순서를 결정하는 randomize라는 부울 속성이 있습니다. randomize가 true이면 DB에 따라 "RAND()"또는 "RANDOM()"으로 정렬됩니다. 그렇지 않은 경우 ID로 정렬됩니다. 열정적 인로드를 사용하기 때문에 협회에서이 선언을해야합니다. 나는 내가 원하는 것을 반환하는 Foo에서 메서드를 정의 할 수 있다는 것을 잘 알고 있지만, 한 번에 모든 것을로드해야합니다. 그렇지 않으면 400-500 개의 쿼리가 개별적으로 실행됩니다. = 나쁜 것입니다.
class CreateFoo < ActiveRecord::Migration
def self.up
create_table :foos do |t|
t.string :name
t.boolean :randomize, :default => false
end
end
end
class CreateBar < ActiveRecord::Migration
def self.up
create_table :bars do |t|
t.string :name
t.references :foo
end
end
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
class Foo < ActiveRecord::Base
# this is the line that doesn't work
has_many :bars, :order => self.randomize ? 'RAND()' : 'id'
end
어떻게 자체의 속성에 액세스 할 lh has_many 선언에?
상황이 나는했으나 실패했습니다
- 는
우는 람다 함수
undefined method `randomize' for #<Class:0x1076fbf78>
내가 얻을 오류 중 하나입니다
문제에서 "자기"는 것 같다. Foo 객체가 아닌 일반 클래스라는 것에 주목하자. 왜 그런가?
범위를 정의해야합니다. # –
sethvargo
에 대해 'includes_values'메소드가 포함되어 있으므로 Foo 클래스가 아닌 Foo 클래스의 인스턴스를 얻으려면 어떻게해야합니까? – sethvargo
세션에 클래스 정의를 사용할 수없는 객체가 포함되어 있습니다. 세션에 보관 된 모든 개체의 클래스가 필요합니다. (원래 예외 : # [NoMethodError]에 대해 정의되지 않은 메소드'includes_values ') –
sethvargo