2012-01-13 1 views
0

Я рубину на рельсах, в поле зрения, я хотел бы проверить, есть ли какая-то переменная, не равная нулю. Предположим, что сначала я должен проверить, есть ли даже объект, а затем проверить, что это r1! = Nil. Есть ли лучший способ? спасибоесть более элегантный способ написать это? переменная в activerecord не равна nil

 <% neki=Anketare.where("semestar_id=? AND JMBAG=? AND sifPred=? and vrstaNastave=?",session[:semestar_id],predmett.JMBAG,params[:format],Vrstanastave.find(1).vrstaNastave) %> 
    <% if neki.exists? %> 
    <% if neki.first.r1!=nil %> 
     A+ 
    <% else %> 
    A- 
    <% end %>  
    <% else %> 
    A- 
    <% end %>  
+0

Некоторое форматирование поможет больше всего. –

ответ

2

Используя ternary operator, я хотел бы предложить что-то вроде

модели или контроллера! -

@neki=Anketare.where("semestar_id=? AND JMBAG=? AND sifPred=? and vrstaNastave=?", 
session[:semestar_id],predmett.JMBAG,params[:format], 
Vrstanastave.find(1).vrstaNastave) 

Вид:

<%= @neki.exists? ? (@neki.first.r1!=nil ? "A+" : "A-") : "A-" %> 

может работать.

Для обмена переменной между контроллером и представлением вам нужен @.

+1

Хотелось бы, чтобы я мог дать вам +1 для вложенного троица (хотя вы можете захотеть поместить некоторые парные парни там для ясности), а еще один никчемный, определяющий класс, определенно не подходит для представления. – Phrogz

+0

спасибо..и кажется, работает ... Мне не нужно ничего рассчитать, просто чтобы напечатать ... – user899119

+0

+1 да, я люблю parens! Я добавил один набор, и это здорово, THX! –

2

Вы можете использовать foo.nil?, чтобы проверить, нет ли чего-то. Значит, вы можете позвонить neki.first.r1.nil? проверить, нет ли этого. Вы также можете просто используйте сам элемент как логический тест:

if neki.first.r1; do_something; else; do_something_else; end 

С рельсами вы также можете использовать foo.blank?, чтобы проверить, если что-то не ноль и не пустая строка или пустой массив. Rails также дает foo.present?, чтобы проверить, если что-то не blank? (такой же, как !foo.blank?)

Так что в вашем случае вы можете просто изменить весь набор, если отчетности:

<%= (neki.present? and neki.first.r1) ? "A+" : "A-" %> 
+0

Спасибо за ваш ответ ... Вы имели в виду <% = neki.r1.present? ? «A +»: «A-»%> – user899119

+0

Нет, вы не можете проверить neki.r1, потому что neki - это массив (или прокси-сервер, который действует как один). Сначала вам нужно убедиться, что neki не пуст (neki.present?), А затем вызывает: r1 на любом элементе - в вашем случае первый элемент - в коллекции neki, чтобы увидеть, существует ли он (neki.first.r1) – PinnyM

1

тьфу. Используйте andand gem:

<%= @neki.andand.first.r1 ? "A+" : "A-" %> 
+0

Спасибо, никогда не знал об этом. Но как будет работать и работать с @neki, который в этом случае, конечно, не ноль, но может быть пустым. – PinnyM

+0

@PinnyM 'andand' является правдивым, а не' nil'y. Chain 'andand' как требуется: '@ neki.andand.first.andand.r1'.Все это должно быть завернуто в помощнике, как указывают другие ответы. –

1

не будет включать в себя какой-либо логики в представлении. Вместо этого вы можете написать модель, которая выполняет логику на neki и neki.first.r1, и вычисляет оценку, а затем вызывает это из вашего представления.

Пример:

# Model 
class Neki 
    def initialize(neki) 
    @neki = neki 
    end 
    def grade 
    (neki.present? and neki.first.r1) ? "A+" : "A-" 
    end 
end 

# Controller 
@neki = Neki.new(Anketare.where(...)) 

# View 
<%= @neki.grade %> 

Надеется, что это помогает!

Смежные вопросы