2016-07-25 4 views
0

나는 랭락을 사용하는 법을 배우므로 거기에 문제가 생길 수 있습니다. 그 이유는 랭락이거나 배열이기 때문입니다.레일 Ransack - 배열에서 요소를 제거

2 개의 텍스트 입력란 (:search:discipline)이있는 양식이 있습니다. 그래서 1º 필드 파라미터 AND 2º 필드 파라미터를 사용하여 검색을 시도하고 있습니다.

아이디어는 1º 매개 변수 (필드 :search에서 오는 모든 요소를 ​​검색하고, 다음 2 º 매개 변수 (필드 :discipline)는 다른 모든 요소를 ​​제거합니다. 반환

class PagesController < ApplicationController 
    def home 
    @rooms = Room.limit(6) 
    end 

    def search 

    if params[:search].present? && params[:search].strip != "" 
     session[:loc_search] = params[:search] 
    end 

    if params[:discipline].present? && params[:discipline].strip != "" 
     session[:loc_discipline] = params[:discipline] 
    end 

    arrResult = Array.new 

    if session[:loc_search] && session[:loc_search] != "" 
     @rooms_address = Room.where(active: true).near(session[:loc_search], 5, order: 'distance')  
    else 
     @rooms_address = Room.where(active: true).all 
    end 

    @search = @rooms_address.ransack(params[:q]) 
    @rooms = @search.result 

    @arrRooms = @rooms.to_a 


    if (session[:loc_discipline] && !session[:loc_discipline].empty?) 

     @rooms.each do |room| 

     not_available = Room.where(
      "(room_type != ?)", 
      session[:loc_discipline] 
     ) 

     if not_available.length > 0   
      @arrRooms.delete(room) 
     end 
     end 
    end  
    end 
end 

@arrRooms NULL을 시도한 후에 NULL을 시도하십시오. @arrRooms.delete(room) 더 나은 방법이 있는지 모르겠지만 찾은 튜토리얼처럼 시도하고 있습니다.

답변

1

모든 방을 표시하려고한다고 가정합니다. 을 사용할 수 없습니까?

저는 최상의 전략은 실제로 원하는 것을로드하고 필요없는 것을 모두 삭제하지 않고로드하는 것이 아니라고 생각합니다. 귀하의 코드 읽기가 정말 어렵다, 나는 당신이 이런 식으로 약간의 튜토리얼을 보시기 바랍니다 : http://tryruby.org/levels/1/challenges/0, 또는이 : 당신이 할 수있는 컨트롤러에서

class Room < ActiveRecord::Base 
    scope :active, -> { where(active: true) } 
    scope :available, -> (discipline) { where.not(room_type: discipline) } 
end 

: https://www.codeschool.com/courses/ruby-bits

같은 범위로 where(active: true)과 같은 코드를 추출 시도 다음을 작성하십시오.

def index 
    @rooms = Room.active.available(params[:discipline]) 
    search_param = params[:search].present? 
    if search_param.present? 
    @rooms = @rooms.near(session[:loc_search], 5, order: 'distance') 
    end 
    @rooms = @rooms.ransack(params[:q]).result(distinct: true) 
end 

이것은 사용자 코드에서 추측 할 수있는 것입니다.

관련 문제