Есть ли более элегантный способ написать это? переменная в activerecord не равна нулю - PullRequest
0 голосов
/ 13 января 2012

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

      <% 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 %>       

Ответы [ 4 ]

2 голосов
/ 13 января 2012

Вы можете использовать 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?)

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

<%= (neki.present? and neki.first.r1) ? "A+" : "A-" %>
2 голосов
/ 13 января 2012

Используя троичный оператор , я бы предложил что-то вроде

Модель или контроллер! -

@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 голос
/ 13 января 2012

Я бы не включил никакой логики в представление. Вместо этого вы можете написать модель, которая выполняет логику для 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 %>

Надеюсь, это поможет!

1 голос
/ 13 января 2012

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

<%= @neki.andand.first.r1 ? "A+" : "A-" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...