Select -> Widok -> Znak hash

Witam,

Proszę o pomoc w problemie wyświetlania danych w widoku, które zostały pobrane przez kontroler. Taki oto prosty kodzik(wszystkie zmienne sa przekazywane poprawnie):

[code]# kontroler
@material_id = ContentsChannel.find(:first, :select => “id”, :conditions => [‘channel_id = ? and content_id = ?’, channel.id,content.id])

widok

<%= @material_id %>[/code]
I teraz efekt: ‘#’
Zamiast otrzymać konkretna wartość (którą ewidentnie widać w debuggerze czy nawet w logach serwera) dostaje ‘#’.

Co robię źle? Jak zrzutować ten wynik na widok, czy nawet jak się tym wynikiem sprawnie posługiwać w kontrolerze, bo próbując stworzyć np. tablice asocjacyjną z tymi danymi wyskakuje, że nie może skonwertować danych na integera.

Więc w jakim “typie” są te dane? Jak nimi operowac albo jak je konwertowac?

@material_id jest obiektem activerecordowym, więc jego to_s, jako że wygląda mniej więcej tak:

#<ContentsChannel id: 23>

to w przeglądarce, która ostre nawiasy chce traktować jako tagi, wszystko prócz # nie jest wyświetlane.
To, co Ciebie interesuje, to atrybut ID tego obiektu:

# widok <%= @material_id.id %>
:slight_smile:

Przeczytanie dokumentacji ActiveRecord.find pozostawiamy jako ćwiczenie dla czytającego :smiley:

ActiveRecord::Base#find(:first, …) zawsze zwraca pełny obiekt (u Ciebie klasy ContentsChannel) niezależnie od opcji. Dzięki dodaniu opcji :select => ‘id’ wysłany SQL zwróci tylko kolumnę ‘id’, a więc również zwrócony obiekt będzie miał tylko atrybut id.