Problem przy wypisaniu danych z tabeli

Witam posiadam taki problem Mam utworzoną tabelę spree_products oraz kolumnę o nazwie promo

chcę wypisać w view dane z określonej komórki i nic nie idzie
W controller mam to


res = conn.exec("SELECT promo FROM spree_products WHERE id = '1';")

res.each do |row|
          	row.each do |column|
          		@abc = "#{column}"
          	end
          end

a w view to:

    <%= @abc %>

Plik wynikowy wychodzi mi taki : [“promo”, “1”] a powinna wyjść mi liczba np. 22

za dużo kombinujesz, ror upraszcza wykonywanie zapytań do bazy w porównaniu z klasycznym sql

wykonuj test zapytania jezeli wyniki Ci nie pasują z konsoli to szybsze niz sprawdzanie na kodzie

[code]np:
1.9.3-p286 :027 > c=Spree::Product.where(‘name LIKE ?’,"%Spree%").select(‘name’)

Spree::Product Load (0.5ms) SELECT name FROM “spree_products” WHERE (name LIKE ‘%Spree%’)
=> [#<Spree::Product name: “Spree Bag”>, #<Spree::Product name: “Spree Tote”>, #<Spree::Product name: “Spree Stein”>, #<Spree::Product name: “Spree Jr. Spaghetti”>, #<Spree::Product name: “Spree Ringer T-Shirt”>, #<Spree::Product name: “Spree Baseball Jersey”>, #<Spree::Product name: “Spree Mug”>][/code]

[quote=koprad]za dużo kombinujesz, ror upraszcza wykonywanie zapytań do bazy w porównaniu z klasycznym sql

wykonuj test zapytania jezeli wyniki Ci nie pasują z konsoli to szybsze niz sprawdzanie na kodzie

[code]np:
1.9.3-p286 :027 > c=Spree::Product.where(‘name LIKE ?’,"%Spree%").select(‘name’)

Spree::Product Load (0.5ms) SELECT name FROM “spree_products” WHERE (name LIKE ‘%Spree%’)
=> [#<Spree::Product name: “Spree Bag”>, #<Spree::Product name: “Spree Tote”>, #<Spree::Product name: “Spree Stein”>, #<Spree::Product name: “Spree Jr. Spaghetti”>, #<Spree::Product name: “Spree Ringer T-Shirt”>, #<Spree::Product name: “Spree Baseball Jersey”>, #<Spree::Product name: “Spree Mug”>][/code]
[/quote]
Koprad jesteś moim guru :slight_smile:

A tak apropos też już i rozwikłałem problem po swojemu oto kod:


          res = conn.exec("SELECT promo FROM spree_products WHERE id = '1';")

          res.each do |row|
          	row.each do |column|
          		@abc = column[1]
          	end
          end

Aczkolwiek opcja Koprasa jest 100 razy lepsza :slight_smile: Pozdrawiam i dziękuję

Pytanie jak mogę wypisać dane z tego kodu


  		teraz = Spree::Product.where('id LIKE ?',"1").select('promo')

  		@abc = tutaj nie wiem co mam wpisać

Czy w Twojej bazie więcej niż 1 produkt ma id=1?
Wyjaśnij co chcesz uzyskać

nie używaj kodu jaki Ci podałem bezpośrednio do Twojej aplikacji, to był przykład, nie wiem co to u Ciebie ‘promo’
Jeżeli masz podana wartość id to przekazujesz to np przez params jako stałą nie LIKE

1.9.3-p286 :001 > Spree::Product.where('id=723959550') Spree::Product Load (0.7ms) SELECT "spree_products".* FROM "spree_products" WHERE (id=723959550) => [#<Spree::Product id: 723959550, name: "Ruby on Rails Bag", description: "Lorem ipsum dolor sit amet, consectetuer adipiscing...", available_on: "2012-12-07 13:23:33", deleted_at: nil, permalink: "ruby-on-rails-bag", meta_description: nil, meta_keywords: nil, tax_category_id: 25484906, shipping_category_id: nil, created_at: "2012-12-07 13:23:33", updated_at: "2012-12-07 13:23:33", count_on_hand: 10>]

Chcę wypisać dane z kolumny promo

controller


 teraz = Spree::Product.where('id LIKE ?',"#{@product.id}").select('promo')

w tej tabeli są zmienne z select_tag 1 lub 2 lub 3 lub 4

w pliku views

                        <% if @abc == 1 %>
                          wyprzedaż
                        <% elsif == 2 %>
                           Nowości
                        <% elsif == 3 %>
                          Promocja
                        <% else %>

                          <%= @abc %>
@selected = Spree::Product.where('id=1').select('promo')

@selected.each do |s| -warunki end

Kurde to taki proste, że asz straszne że nie wiedziałem że tak można… Dzięki jeszcze raz Pozdrawiam.

jeżeli wynikiem jest zawsze 1 komórka to kodujesz to jeszcze krócej bez petli.
pozdr.

Teraz mam taki problem otóż to samo chcę wypisać w liście produktów a nie mogę wyrzuca mi błąd Called id for nil, which would mistakenly be 4 – if you really wanted the id of nil, use object_id

Troche za mało zastanawiasz sie nad założeniami modelu i potem dorabiasz kod. W jednej komórce chcesz trzymać 4 informacje dla 1 produktu. A co jeżeli produkt bedzie Nowy i w Promocji? Powinieneś albo założyć osobne tabele powiązane z Product (doradzam )albo dołożyć kolumny boolean ‘new’ ‘promo’ ‘sale’ itd dla tabeli Product. Wtedy zobacz jak łatwo będzie ich szukać np: @nowe = Spree::Product.where(:new=>true) Zastanów się nad tym zanim klient każe Ci zmieniac srodowisko produkcyjne.

Witam. Przepraszam że teraz odpisuję ale trochę się rozchorowałem. A co do tematu… To klient właśnie chcę w tak jak robię tzn. wystarczy tylko jedna kolumna do wyświetlania danych, wyszukiwać promocje lub wyprzedaże będzie z wyszukiwarki. Problem mam teraz innego rzędu, otóż nie wiem jak wypisać dane z tabeli promo, spree_products, w liście produktów cały czas wyrzuca mi jakieś błędy.

[code] NoMethodError in Spree/products#index

Showing /home/albert/Dropbox/intimiti/app/views/spree/shared/_products.html.erb where line #41 raised:

undefined method `wypisz’ for #Spree::Product:0x000000070c9890

Extracted source (around line #41):

38:
39:


40:
41: <%= product.wypisz %>
42:
43: <%= number_to_currency product.price %>
44:
[/code]
view wygląda tak:

[code ruby] <% products.each do |product| %>
<% if Spree::Config[:show_zero_stock_products] || product.has_stock? %>
<li id=“product_<%= product.id %>” class=“columns three <%= cycle(“alpha”, “secondary”, “”, “omega secondary”, :name => “classes”) %>” data-hook=“products_list_item” itemscope itemtype=“http://schema.org/Product”>

        <%= link_to small_image(product, :itemprop => "image"), product, :itemprop => 'url' %>
        <span>
          <% if product.images[1..1].nil? %>
          <% else %>
                <% product.images[1..1].each do |i| %>
                  <%= link_to image_tag(i.attachment.url(:small)), i.attachment.url(:product) %>
                <% end %>
          <% end %>
        </span>
    </div>

    <div class="producent"><a href="/">Kinga</a></div>
    
    <div class="name">
      <h3>
        <%= link_to truncate(product.name, :length => 58), product, :class => "info", :itemprop => "name", :title => product.name %>
      </h3>
    </div>
    
    <div class="info2">

        <%= product.wypisz %>

      <span class="price selling" itemprop="price"><%= number_to_currency product.price %></span>
    </div>

  </li>
<% end %>

<% end %>[/code]
controller wygląda tak:

[code ruby] def index
@searcher = Config.searcher_class.new(params)
@products = @searcher.retrieve_products
respond_with(@products)

  @text_item = Spree::Product.where(:id => @product.id).select('promo')

  wypisz(@text_item)


end

def wypisz(display)
  if display == "2"
    put = "Promocja"
  else
    
  end
end[/code]

masz wyrazną podpowiedz co jest zle - niezdefiniowana funkcja wypisz.

Powiedzmy wprost: nie masz pojęcia o programowaniu, bierzesz się za to wszystko niestety od dupy strony i takie są efekty - chcesz zarobić na czymś, na czym kompletnie się nie znasz, o czym świadczą zakładane tematy. Propozycja jest taka - zmień język, w którym piszesz, na coś, co znasz, a jak nie znasz w ogóle, to zleć komuś zewnętrznemu, bo z wiedzą, którą masz albo zrobisz dziurawy serwis, albo się sypnie na produkcyjnym i będziesz stratny na tym biznesie. Taka mała dobra rada.

Konole, jesteś jednym z tych geniuszy którzy od pierwszego dnia z klawiaturą byli senior programistami? Opowiedz nam jak to jest?

Metoda jest, tylko zdefiniowana w złym miejscu, powinna być w modelu Product a nie w kontrolerze. Jej treść powinna też wyglądać trochę inaczej:

def wypisz if display == "2" "Promocja" end end

Ale tu nie chodzi o bycie geniuszem lub nie. Po prostu liczba tematów zakładanych z powodu tego jednego serwisu, jest przeważająca. Jest błąd - po co się natrudzić, poszukać, przeczytać chociaż opis błędu - lepiej dać wkleić go tutaj i niech inni pomyślą.

Że kolega 2strefa syfi tematami to kwestia zupełnie ortogonalna od tego, że dajesz komuś porady na poziomie “jesteś na to za głupi, zmień język/technologię”. W razie gdybyś nie zrozumiał (tacy geniusze jak Ty miewają z tym problemy): to jest bardzo niski poziom. Chętnie poznam opinię moderatorów co sądzą o takich komentarzach jak Twój.