내가 2 개체를 추가하고 변수로 저장하고 NULL인지 여부를 확인 :레일 -이 같은 일이 객체를 병합하고 그 결과가
@articles = Articles.where(...condition1...) + Articles.where(...condition2...)
나는이 두 개체를이 방법을 병합해야
는, 불행히도있다 두 가지 쿼리를 대체 할 쿼리를 작성할 필요가 없습니다.
어쨌든 첫 번째 쿼리에 데이터가 포함되어 있거나 두 번째 쿼리에서 일부 데이터가 반환되거나 둘 다 일부 데이터가 반환되면 데이터를 반복하여 처리 할 수 있습니다.
하지만 그 두 쿼리 중에 데이터를 반환하지 않는 경우,이하여 @articles
변수의 출력 :
<% if @articles.count > 0 %> # this returns 2
<% @articles.each do |article| %>
<div><%= article.id %></div> # error - undefined `id` for nil
이유 : 나는 같은 것을 할 경우,보기에 따라서
puts @articles.inspect # => [nil, nil]
위 쿼리 중 하나라도 데이터를 반환하지 않으면 결과는 대신 [nil, nil]
입니까?
@articles
이 두 개의 쿼리를 결합 할 수 있지만 적어도 쿼리에서 결과가 반환되는 경우 출력은 [data]
이 아니고 [data, data]
이 아닙니다.
왜 그럴까요?
시간을내어 미리 감사드립니다.
어느 내가 눈치 적이 뭔가 또는 explictily'사용하는 것처럼 그것은 where' 문'where' 반환'액티브 :: Relation' 인 때문에 보이지 않습니다 [to_a] (http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-to_a)에 의해 '배열'로 '변형'되었습니다. 이러한 쿼리 스텁이 포함 된 코드 스 니펫을 추가하십시오. – blelump
@ble 럼이 정확합니다. 여기서 무엇이 일어나고 있습니까? '# where'는'ActiveRecord :: Relation' 객체를 반환합니다. '+'를 사용하여 결합하면 'Array'가 반환됩니다. 'Articles.where (이름 : "존재하지 않음") + Articles.where (이름 : "또한 존재하지 않습니다")''[] '를 반환해야하기 때문에 데이터를 변경해야한다고 생각합니다 – engineersmnky