Ruby и Rails Простой вопрос по выражению - PullRequest
0 голосов
/ 23 марта 2011

Привет, есть ли быстрое выражение Ruby (или Rails), которое возвращает nil, если у объекта нет значения?

Например, если self.name имеет значение null в базе данных, оно должно вернуть nil,Если это строка, она должна вернуть ее.Я думаю о разве что, но, может быть, есть что-то лучше.

Кроме того, если у вас есть такая функция, как get_profession (type), а type может быть "first", "second" или "third", чтобыло бы элегантным способом запроса self.first или self.second или self.third (в соответствии с параметром типа) и возврата nil, если self.first (или другой тип) не имеет строкового значения?

Как видитеВторой вопрос тесно связан с первым.

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

В Ruby, если переменная не имеет значения, по умолчанию она равна nil. Чтобы ответить на второй вопрос, вы можете использовать метод send для вызова методов типа. Что-то вроде

def get_profession(type)
  # Making sure correct type is passed.
  raise RuntimeError unless ['first', 'second', 'third'].include?(type.to_s)
  send(type)
end

Send ожидает метод в строке в качестве параметра, который он вызывает для того же объекта. В вашем случае, если ответ вашего метода "type" не имеет значения, по умолчанию он будет nil.

1 голос
/ 23 марта 2011

фактически возвращает ноль, если не было значения.ты на самом деле уже пробовал это?если объект не имеет никакого значения, он ДОЛЖЕН вернуть nil

, но необходимо добавить, что ваш атрибут должен иметь соответствующее имя столбца в базе данных. В противном случае это будет неопределенный вызов метода.

например

Company.name <- должен возвращать ноль, если в таблице компаний есть столбец имени, но не имеет значения </p>

, если у вас нет столбца имени, он скажетнеопределенное имя метода.

Обычно и проще просто проверить поле, если вы планируете отображать его следующим образом:

 <%= @person.profession if @person.profession %>

или наоборот

 <%= @person.profession unless @person.profession.nil? %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...