Поскольку вы выполняете целочисленное деление.
Как говорит @Noldorin, если оба оператора являются целыми числами, то используется целочисленное деление.
Результат 0.33333333 не может быть представлен как целое число, поэтому к результату присваивается только целочисленная часть (0).
Если любой из операторов является double
/ float
, тогда будет выполнена арифметика с плавающей запятой. Но у вас будет такая же проблема, если вы это сделаете:
int n = 1.0 / 3.0;
Ваша проблема состоит в том, что Вы используете каждый метод для создания строки. То, что Вы хотите, является методом карты. каждый метод возвращает хеш, и карта возвращает значение блока.
Вы хотите что-то вроде этого:
@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>
Проблема, puts
ноль возвратов.
то, Что Вы хотите сделать:
@test2 = ""
@test2 = records_hash.each { |k,v| s<< "#{k} is #{v}" }
или что-то подобное.
Редактирование: То, что Вы присваиваете @test2
в Вашем примере кода, является возвращаемым значением .each
блок.
Вы могли просто поместить это в свое представление, вместо того, чтобы присвоить его переменной.