Новичок: троичный синтаксис условия «if» в ПРЕДСТАВЛЕНИИ

#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1

#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1

Вопрос:

Я хотел бы иметь логику условий if, например:

 var == 10 ? “10″ : “Not 10 

в ПРЕДСТАВЛЕНИИ Rails. То, что я попробовал, заключается в следующем:

 <%= session[:id]=="out"? link_to "Sign in", login_path : link_to "Sign out", logout_path%>
  

Я знаю, что это выглядит странно, и неудивительно, что это не работает. Итак, если я хотел бы использовать троичное условие if в ПРЕДСТАВЛЕНИИ, как правильно поступить в моем случае?

———Еще одно условие———

Я хотел бы иметь два «link_to» в условии else

—— Сообщение об ошибке, которое я получил———

 compile error

syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '('
...ession[:id]=="out" ? link_to "Sign in",
  

Ответ №1:

Попробуйте это (единственное различие — это пробел между " и ? и использование круглых скобок)

 <%= session[:id]=="out" ? link_to("Sign in", login_path) : link_to("Sign out", logout_path) %>
  

Хотя круглые скобки в Ruby необязательны, в некоторых случаях они необходимы для поддержания приоритета оператора.

Троичные операторы IMHO трудно читать. Вы также могли бы сделать что-то более подробное:

 <%= link_to("Sign in", login_path) if session[:id] == "out" %>
<%= link_to("Sign out", logout_path) if session[:id] != "out" %>
  

Комментарии:

1. 1 вместо этого использовал синтаксис <%= «outputtext» if a=b %> , спасибо.

Ответ №2:

 session[:id]=="out"?
  

выглядит неправильно. Это должно быть

 session[:id]=="out" ?
  

Кстати, если вам нужно больше ссылок в части else, переключитесь на if else. Это могло бы быть более чистым:

 <% if condition %>
  link
<% else %>
  link
  link
<% end %>