class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
콘솔에서 레코드를 만들려고 할 때 경고를 표시하는 레일스 앱에이 모델이 있습니다.
지원 중단 경고 : RelatedList.has_many : contents 선언의 다음 옵션이 지원 중단되었습니다. : order. 대신 범위 블록을 사용하십시오. 예 : has_many : spam_comments, 조건 : {spam : true}, class_name : ‘Comment’는 다음과 같이 다시 작성해야합니다. has_many : spam_comments,-> {where spam : true}, class_name : ‘Comment’. (/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7에서 호출)
Rails 4에는 모델에서 사용하기위한 새로운 : order 구문이있는 것 같지만 Rails Guides에서 문서를 찾을 수없는 것 같습니다.
답변
Rails 4에서는 :order
더 이상 사용되지 않으며 질문에 게시 한 경고에 표시된대로 람다 범위 블록으로 교체해야합니다. 주목해야 할 또 다른 점은이 범위 블록이 dependent: :destroy
etc 와 같은 다른 연결 옵션보다 먼저 전달되어야한다는 것입니다 .
이것을 시도하십시오 :
has_many :contents, -> { order(:position) }
주문 방향을 지정하려면 asc
또는 desc
@ joshua-coady 및 @wsprujit가 제안한대로 다음을 사용하십시오.
has_many :contents, -> { order 'position desc' }
또는 해시 스타일 사용 :
has_many :contents, -> { order(position: :desc) }
의 활성 레코드 범위에 대한has_many
추가 참조 .
답변
순서를 지정하고 포함하는 방법을 파악하는 데 시간이 좀 걸렸습니다. 결국 범위 설명 을 연결하는 것을 발견했습니다 .
has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"
답변
옵션 해시 인수가 있으면 다음과 같이 람다를 따라야한다고 추가 할 것이라고 생각했습니다.
has_many :things, -> { order :stuff }, dependent: :destroy
이 문제를 직접 해결하는 데 잠시 시간이 걸렸습니다.이 질문에 동일한 문제가있는 다른 사람에게 도움이되기를 바랍니다.
답변
이것은 Rails 4 및 MongoDB 에서 나를 위해 작동합니다.
has_many :discounts, order: :min_amount.asc
답변
또는 order
모델에 절을 넣을 수 있습니다 . 예를 들면 다음과 같습니다.
has_many :options, order: 'name' # In class Answer
된다
has_many :options # In class Answer
default_scope { order 'name' } # In class Option
PS : 내가 가진 ArgumentError: wrong number of arguments (1 for 0)
수행 할 때 has_many :things, -> {}
.