Ruby on Rails: hash.each {} проблемы

Поскольку вы выполняете целочисленное деление.

Как говорит @Noldorin, если оба оператора являются целыми числами, то используется целочисленное деление.

Результат 0.33333333 не может быть представлен как целое число, поэтому к результату присваивается только целочисленная часть (0).

Если любой из операторов является double / float, тогда будет выполнена арифметика с плавающей запятой. Но у вас будет такая же проблема, если вы это сделаете:

int n = 1.0 / 3.0;
15
задан dylanfm 10 January 2009 в 05:20
поделиться

3 ответа

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

Вы хотите что-то вроде этого:

@test2 = records_hash.map { |k,v| "#{k} is #{v}" }

кроме того, Вы не должны создавать код представления как это, если это не простая строка. Ваш пример подразумевает желание каждого уникального элемента на каждой строке. Таким образом, Ваше представление должно быть похожим на это:

<% @records_hash.each do |k,v| %>
<%= "#{k} is #{v}" %>
<% end -%>

, Если Вашим представлением является HTML один, Вы захотите некоторый разделитель между каждой строкой также:

<% @records_hash.each do |k,v| %>
<%= "#{k} is #{v}" %><br/>
<% end -%>

или

<ul>
  <% @records_hash.each do |k,v| %>
  <li><%= "#{k} is #{v}" %></li>
  <% end -%>
</ul>
40
ответ дан 1 December 2019 в 00:54
поделиться

Проблема, puts ноль возвратов.

то, Что Вы хотите сделать:

@test2 = ""
@test2 = records_hash.each { |k,v| s<< "#{k} is #{v}" }

или что-то подобное.

Редактирование: То, что Вы присваиваете @test2 в Вашем примере кода, является возвращаемым значением .each блок.

1
ответ дан 1 December 2019 в 00:54
поделиться

Вы могли просто поместить это в свое представление, вместо того, чтобы присвоить его переменной.

0
ответ дан 1 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: