#ruby-on-rails #ruby #ruby-on-rails-3
#ruby-on-rails #ruby #ruby-on-rails-3
Вопрос:
Я пытаюсь выполнить инструкции if и else в этом текстовом поле со значением:
<%= f.text_field :rating, :size => 1, :min => 1, :max => 6, :value => if vind.ratings == 0 else vind.rating_score/vind.ratings, :type => 'range', :step => '1', :id => "#{vind.id}" %>
Я получаю эту ошибку в поле зрения:
SyntaxError in Kategoris#show
Showing C:/Rails/konkurranceportalen/app/views/kategoris/_rating.html.erb where line #3 raised:
C:/Rails/konkurranceportalen/app/views/kategoris/_rating.html.erb:3: syntax error, unexpected keyword_else, expecting keyword_then or ';' or 'n'
...ue => if vind.ratings == 0 else vind.rating_score/vind.ratin...
... ^
C:/Rails/konkurranceportalen/app/views/kategoris/_rating.html.erb:3: syntax error, unexpected ',', expecting ')'
...vind.rating_score/vind.ratings, :type => 'range', :step => '...
... ^
Ответ №1:
Обычно я использую сокращение, вот так:
:value => ( vind.ratings == 0 ? 0 : vind.rating_score/vind.ratings )
Ответ №2:
<%= f.text_field :rating, :size => 1, :min => 1, :max => 6, :value => (vind.ratings == 0) ? 0 : vind.rating_score/vind.ratings, :type => 'range', :step => '1', :id => "#{vind.id}" %>
В конечном итоге это выглядит следующим образом для :value .
:value => (vind.ratings == 0) ? 0 : vind.rating_score/vind.ratings
Комментарии:
1. Это код ruby, но ruby работает и в rails. Rails был построен на ruby.
2. Почему я не могу написать, если vind.ratings == 0 else 1 end или :value => «#{<% if vind.ratings == 0 %><% else %><%= vind.ratings %>}»?
3. @tzown вы не можете написать это просто потому, что это недопустимый ruby-код
4. Во-первых, ваша логика неверна. Вы указываете, показывает ли vid.ratings == 0 {do_nothing} еще vind.ratings. Вы ничего не можете сделать в ruby. Это недопустимый код. Вам просто нужно будет выполнить if vind.ratings > 0, а затем показать vind.ratings.
5. @tzown, для дальнейшего использования то, что я использую, называется троичными операторами. en.wikipedia.org/wiki/Ternary_operation#Ruby
Ответ №3:
Я могу сделать вот так:
<%= f.text_field :rating, :size => 1, :min => 1, :max => 6, :value => "#{if vind.ratings == 0 else vind.rating_score/vind.ratings, :type => 'range', :step => '1', :id => "#{vind.id}" %>
или как выше, но в ():
<%= f.text_field :rating, :size => 1, :min => 1, :max => 6, :value => ((vind.ratings == 0) ? value_here : vind.rating_score/vind.ratings), :type => 'range', :step => '1', :id => "#{vind.id}" %>