Ruby on rails получение данных из хэша

#ruby-on-rails #ruby #hash #view

#ruby-on-rails #ruby #хэш #Вид

Вопрос:

я просто не понимаю, где я сделал неправильно. пожалуйста, выделите их для меня. Я тестирую график с использованием gruff.

в ReportController

 def mygruff
    @gr = Hash.new
    @gr["jan"] = 3
    @gr["feb"] = 6

    logger.info({#@gr.keys})
end
  

в моем журнале я получил ‘janfeb’

в представлении mygruff

 <%if @gr.blank?%>
   <%=No gruff%>
<%else%>
   <%=@gr.keys%>
<%end%>
  

Я не получу грубости на своей странице gruff.
Но я получаю это в своем журнале.

Я пытался

 object.empty? 
true

object.blank?
true

object.nil?
false
  

как получить хэш, на мой взгляд?
пожалуйста, покажите мне способ.Спасибо.


     def stat2
      @cus_t = Hash.new

      a = Gruff::Bar.new('500x350')
      a.theme = {
        :colors => ['#138F6A','#330000','#0aaafd','#FF0000','#00CD00','#ff6602', '#3bb003', '#1e90af', '#efba30', '#0aaaac'],
        :marker_color => '#aaa',
        :background_colors => ['#eaeaea', '#fff']
      }
      a.hide_title = true


      @customer = Customer.find(:all)
      @customer.each do |custs|
      @g_cus = Casedf.count(:all, :conditions=> "customer_id="   custs.id.to_s)    
      a.data(custs.companyname, @g_cus)
     #@cus_t[custs.companyname] = @g_cus
      @cus_t.store(custs.companyname,@g_cus)

      end

      a.write("#{RAILS_ROOT}/public/images/customer.png") 
      $logger.info("hash keys #{@cus_t.keys}")


  end # end def
  

Вот что я сделал на мой взгляд:

 <table>
<% if @cus_t.nil?%>
    <tr>
    <td colspan="6">No cus added so far<%=@cus_t.keys%>l</td>
    </tr>
<%else%>
<tr>
<td><%=@cus_t.keys%></td>
</tr>

<%end%>

</table>
  

Итак, когда я перехожу на страницу stat2, я ничего не получаю, но в моих журналах ключи распечатаны. Я в тупике, пожалуйста, помогите.

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

1. Почему вы создаете хэш таким образом? Это вернет nil в версии 1.8.7 и синтаксическую ошибку в версии 1.9.2 @gr = {"jan" => 3, "feb" => 6} Вместо nil будет возвращено false, потому что вы, по крайней мере, создали хэш, но не заполнили его. Попробуйте это в irb. Вам понадобится @gr.store("arg","arg") , чтобы заставить его работать.

2. да, я использую 1.8.7. я просто перехожу по ссылке .на самом деле это ‘=’ не ‘=>’.

3. кейли, я сделал то, что ты сказал. но все равно я ничего не получаю на своей странице gruff.ура… что я сделал не так…

Ответ №1:

Привет, есть ли у вас в вашем действии

 def mygruff
  @gr = Hash.new
  @gr["jan"] = 3
  @gr["feb"] = 6

  logger.info({#@gr.keys})
end
  

это было непонятно для меня из комментария

Ответ №2:

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

 <% if @gr.empty? %>
  No gruff
<% end %>
<%= @gr.inspect %>  <!-- print regardless to see if there is data there -->
  

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

1. спасибо, Дэвид. я сделал то, что вы предложили. и я получаю этот вывод: пока не добавлено ни одного cus {} …. я предполагаю, что он пустой. но в контроллере, я распечатываю @gr, я получаю значения. почему он не разобрался в своем представлении?