2010-06-30 3 views
1

Борясь с этим немного. У меня есть две формы поиска параметров, когда оба поля соответствуют этому, возвращает строку в @person:Rails/3 - Частично рендеринг в зависимости от состояния переменной экземпляра?

Так что я хочу, чтобы сделать один фрагмент перед поиском, другой, если человек сопоставлен, а другой - если запись не найден.

Куда идет эта логика и с чем я могу проверить?

def index 
    if params[:id] && params[:dob] 
    @person = Person.where("id = ? and dob = ?", params[:id], params[:dob]).first 
    end 
end 

В моей index.html.haml

-if ! @person.nil 
    =render :partial => 'found' 
-elsif @person.nil 
    =render :partial => 'not_found' 
-else 
    =render :partial => 'welcome' 

Проблема в том, что @ person.nil? всегда верно, выполняется ли поиск или нет. У кого-нибудь есть идеи, что делать? Что мне не хватает?

+0

'@person = @person ='? – Matchu

+0

Кроме того, обязательно скопируйте исходный код. 'elif' в вашем представлении недействителен Ruby, указывая, что это, вероятно, было напечатано вручную;) Также как и отсутствующий парен в конце строки 3 бит контроллера. О, и '@ person.nil' будет атрибутом. Возможно, вы имели в виду '@ person.nil?'? Трудно ответить на кодовый вопрос, когда это скорее не тот код, о котором идет речь. – Matchu

+0

@Matchu, судя по расширению .haml index.html.haml, похоже, что он использует HAML. Быстрая проверка документов HAML - http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#running_ruby_ - похоже, что это возможно, хотя я не знаю достаточно о HAML, чтобы узнать, верно. –

ответ

1

Вы можете просто установить @person все же

def index 
    if params[:id] && params[:dob] 
    @person = Person.where("id = ? and dob = ?", params[:id], params[:dob]) 
    else 
    @person = false 
    end 
end 

Таким образом, у вас нет проблем с нуля и проверить, если он равен нулю.

На ваш взгляд, вы можете просто проверить, является ли @person ложным или размер больше нуля.

-if @person 
    -if @person.size > 0 
    =render :partial => 'found' 
    -else 
    =render :partial => 'not_found' 
    -end 
-else 
    =render :partial => 'welcome' 
-end 
Смежные вопросы