Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 10 Jun 2015, 13:27 
Offline
Novize

Registriert: 30 Jun 2008, 05:55
Beiträge: 14
Guten Tag,

seit meiner Anmeldung 2008 habe ich Rails und Ruby im Allgemeinen etwas vernachlässigt. Jetzt bei meinem ersten Versuch selber etwas zu erstellen verdeutlichen sich noch meine Defizite. Vielleicht ist jemand so freundlich und kann mir ein paar Impulse geben.

Problem:
Im Zuge der Normalisierung von Datenbanken, wollte ich mehrere Tabellen verwenden statt einer "großen". Das verkompliziert jetzt die Art wie ich auf die Tabellen zugreifen wollte. Ich verstehe nicht wie ich Rails dazu bekomme, das zu tun was ich will.

Wo implementiere ich am besten die Logik?
Mein Kernproblem ist, das ich das Problem noch nicht erkannt habe. Annäherung: Ich will im Hintergrund eine automatische Abfrage und Auswertung der Antwort bei einem anderen Controllern. Quasi für mein Sortiment, bei der Erstellung/Erweiterung (und später bei der Anzeige von einem verfügbaren Artikel) prüfen ob ein Händler (vorher eingetragen) das Produkt hat. Quasi Name identisch, Gebinde identisch, EAN ist die selbe.

Wie mache ich es am besten? Muss ich dafür immer einen eigenen Controller erstellen? Eine eigene Datenbank-Tabelle für die Beziehungen? Gedanklich muss ich den Controller irgendwo anpassen, das er Zwischenergebnisse produziert und das "Has many" selbständig erweitert und Verknüpft.

Ich bin mit jquery und ajax auch noch Anfänger, war die Erstellung einer Bestellung mit dynamischem "einen weiteren Artikel/Position hinzufügen" auch noch schwierig. Versuchte mich mit wenig Erfolg an verschachtelten/Nested Forumalen/Forms. Zeit verschwendet hatte ich mit railscasts.com: Complex Forms Part 3. Zwar eine sehr gute Seite, aber die dort beschriebene Methode funktioniert so nicht mehr oder mit meinem Problem. Wie macht man das Heute?

In verschiedenen Beispielen wird indirekt referenziert. Angeblich wenn die Beziehungen zwischen den Controllern stehen (has many, belongs to..). Bei mir führte aber auch das immer zu einem Fehler, als hätte mein Rails das noch nicht erkannt.

Schema:
Zitat:
Bestellung/Order:
id (integer)
oderdate (date)
trader_id (integer)
total_amount (float)

Bestellung_Einheit_Position/Order_items:
id (integer)
order_id (integer)
article_id (integer)
count (float)
amount (gloat)


Kontext bei welchem Händler bestellt wird geht aus der Bestellung/dem zu bearbeitenden Event hervor. Welcher Artikel kommt vom Artikel-Controller und so weiter.

Wie rufe ich jetzt den Order_items-New Controller auf, wenn ich doch erst Order-New geklickt hab? Wo kann ich dann die Eingabe prüfen? Fällt das bei Nested-Formularen weg?

Darf ich gar keinen Order_items Controller verwenden weil das lediglich ein Hash/Jason-Format gespeicherter Wert ist der zur "Bestellung" gehört? Gedanklich würde das einiges vereinfachen. Aber ich wollte später auch jede einzelne Position prüfen und zur virtuellen Bestandspflege eventuell heranziehen.

Zuerst dachte ich das geht irgendwie in einem Verschachtelten verfahren:

1. /orders/new aufrufen (Rails merkt sich das)
2. Immer wieder order_items/new aufrufen um eine Zeile per Ajax und Co hinzuzufügen...
-Zwischen jedem Order_items/new kann ich Prüfen ob das Objekt doppelt drin ist, ob es existiert usw, Berechnungen bei der Aktallisierten Anzeige der Menge und des Betrages-
3. Zusammenfassung anzeigen.
4. /orders GET die Bestellung speichern.


Nach dieser Gedanklichen Niederschrift vermute ich das ich das Order-Objekt erst mal erstellen muss anschließend auf ein Order_items/show verweisen muss, welches aber direkt an der einen Bestellung hängt schließlich will ich nicht alle Jemals hinzugefügten Order_items ansehen.

Ich lasse das jetzt erst mal hier so stehen und denke noch mal etwas drüber nach, beziehungsweise schreibe etwas neues wenn sich bei mir was tut oder das Problem konkreter wird. Jegliche Verbesserungsvorschläge/Kommentare Anregungen nehme ich gerne entgegen.

Meine Gedanken finden es einfacher die Datenbankeinträge direkt zu verarbeiten/manipulieren/prüfen. Wahrscheinlich weil ich und Rails noch nicht warm geworden bin. Im Grunde muss ich jede Information bei Rails doch in Datenbanken speichern, damit sie nicht verloren geht oder? Zur Weiterverarbeitung dann aber auch gleich wieder Abfragen. Wo gibt es bei Rails die globalen Variablen? Welche Möglichkeiten habe ich da? Muss ich dafür extra einen Bestellung_Season erstellen?

Vielen dank fürs Zuhören, jetzt habe ich zumindest wieder neue Ideen und stehe nicht mehr an einem toten Ende.


Nach oben
 Profil  
 
BeitragVerfasst: 10 Jun 2015, 15:16 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1821
Wohnort: NRW → UN
Das ist umfangreich :-). Evtl. solltest du das Thema aufbrechen und für die einzelnen Fragestellungen einzelne Themen eröffnen. So sehe ich die Gefahr, dass es hier viel Durcheinander gibt, wenn auf die verschiedenen Teilaspekte eingegangen wird.

Auch ich beschränke mich erstmal auf einen Teilaspekt, denn um alles auf einmal zu beantworten, bräuchte ich mehr Zeit.

Jumpy hat geschrieben:
Wie mache ich es am besten? Muss ich dafür immer einen eigenen Controller erstellen? Eine eigene Datenbank-Tabelle für die Beziehungen?


Du hast das MVC-Konzept noch nicht verstanden, woraus diese Fragestellung resultiert. Im Grunde funktioniert es so:

  • Das Model ist für die Datenbankebene zuständig: Wer hängt wie mit wem zusammen?
  • Die View ist das, was der Nutzer zu Gesicht bekommt: HTML und CSS und JavaScript.
  • Der Controller tritt in Aktion, wenn der Nutzer eine View anfordert, und die View zu ihrer Darstellung Daten braucht. Dazu fragt der Controller die Models ab.

Anders ausgedrückt: Du musst dich vom Denken in SQL lösen. Das geht so weit, dass man eigentlich sogar mit Rails programmieren kann, ohne überhaupt SQL kennen zu müssen (auch wenn das für fortgeschrittene Techniken freilich unentbehrlich ist; das Konzept von Kreuztabellen ist ohne SQL-Kenntnisse schwer verständlich, von komplexen Abfragen ganz zu schweigen). Vergiss einfach mal alles, was du über SQL gelernt hast, und arbeite stattdessen in den Strukturen der Objektorientierten Programmierung (OOP), denn die Models sind nach diesem Schema organisiert. Was ActiveRecord (die Model-Komponente von Rails) macht, ist, die OOP-Strukturen bei Abfrage auf SQL umzulegen, man spricht insoweit von einem Object-relational Mapper (ORM). Das Konzept ist umstritten, aber der Erfolg von Rails macht deutlich, dass es nicht ganz falsch sein kann, und die Streitigkeit dieser Frage tut für dein konkretes Problem nichts zur Sache*.

Es ist vielleicht hilfreich, erstmal ein paar objektorienterte Programme ohne Rails oder auch nur Webkontext zu erstellen. Sobald du mit OOP warm geworden bist, kommst du dann nochmal auf Rails zurück, dann wirst du die Konzeption von ActiveRecord viel einfacher zu meistern finden. Und dann kommst du auch von selbst darauf, wie deine Problematik aufzulösen ist :-)

Vale,
Quintus

* Selbstverständlich kann man sich auch in Ruby von ORMs lösen, wenn man mit dem Konzept nicht zufrieden ist. Du kannst jederzeit gegen die rohen Datenbankadapter-APIs schreiben (pg, mysql2), oder eine Highlevel-SQL-Library wie Sequel verwenden. Das ist mit Rails aber teilweise schwierig umzusetzen, weil nicht vorgesehen (Stichwort opinionated software).

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation auf meiner Website.

Mein Blog | GitHub-Profil | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F BCC8 BC4F


Nach oben
 Profil  
 
BeitragVerfasst: 11 Jun 2015, 20:05 
Offline
Novize

Registriert: 30 Jun 2008, 05:55
Beiträge: 14
Vielen Dank für die Antwort Quintus.

Ich hatte lange Zeit Rails und Ruby schleifen lassen. Bis ich mich jetzt wieder durch gerungen habe da mehr Zeit zu investieren. Wenn man voran kommt macht es ja auch Spaß und fesselt einen wieder sofort.

Aktuell suche ich halt eine "best Practice 2015". Eben weil diverse Dokumentationen noch Code haben der wahrscheinlich so nicht mehr geht. Ich schau mich noch mal bei Railscasts um.

Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht oder schaue mir den falschen Wald an. Mal denke ich vom Konzept muss es doch sein wie "Einen Kommentar zu einem Blogartikel schreiben".

Ich melde mich später noch mal. Wenn ich mal wieder nicht weiterkomme.

Vielen Dank!

Update
So schnell kann es gehen. Das Problem was mir den Nerven gekostet hat lag daran das ich zum einen scaffolding nicht nutzte und zum anderen die routen nicht richtig definierte. Jetzt wird mir einiges verständlicher.

Es gibt doch nichts über Stufenweise, Dokumentationen lesen, in den Code schauen, anpassen, testen.


Nach oben
 Profil  
 
BeitragVerfasst: 25 Jun 2015, 15:22 
Offline
Novize

Registriert: 30 Jun 2008, 05:55
Beiträge: 14
Edit: Ahh ich hab die Lösung.


1
2
<% @article = Article.find_by_article_number(order_item.article_id.to_s) %>
<% @product = Product.find(article.product_id) %>


Weil das ganze ja Instanzen sind brauchte ich natürlich Variablen für Artikel und Produkte, zum einfachen Zugriff. Auf order_item.anzahl kann ich hingegen direkt zugreifen.

Das macht richtig viel Spaß wenn man gut voran kommt.

Originalpost:

Quintus hat geschrieben:
Der Controller tritt in Aktion, wenn der Nutzer eine View anfordert, und die View zu ihrer Darstellung Daten braucht. Dazu fragt der Controller die Models ab.


Auch auf die Gefahr hin das ich wieder was furchtbar dummes frage.

Ich dachte ja zuvor schon ich müsste mich um die Verknüpfung/Relationen der Dinge auf Datenbankebene kümmern indem ich die ID der unterschiedlichen Objekte mit in die Datenbank packe.

Jetzt habe ich folgenden Fehler:
NoMethodError in Orders#show

app/views/order_items/_order_item.html.erb

Zitat:
undefined method `preis' for nil:NilClass




1
2
3
4
5
6
7
8
9
<% article = Article.find_by_article_number(order_item.article_id) %>
<% product = Product.find(article.product_id) %>
<td><%= link_to 'Entfernen', [order_item.order, order_item], method: :delete %><td>
<td><%
=
@article.preis %></td>
<td><%= @product.name %></td>
<td><%
=
@product.beschreibung %></td>
<td><%= @order_item.anzahl %></td>
<td><%
=
@article.preis_gebinde %> EUR</td>
<td><%= @order_item.summe %> EUR</td>


Aktuell habe ich noch einige Probleme die ich eh anders lösen will. Beispielsweise die Eingabe der Artikel-Nummer, hier mit (order_item.article_id). Welche schon bei der Eingabe ein Find_by prüft ob der Artikel existiert, Vorschläge ob ein anderer gemeint ist oder ob der Artikel doppelt ist. So ein Kram halt, da weiß ich immer noch nicht wo das einen guten Platz hat. Ich denke es muss als Prüfung in den Controller bei Order_item.create? Das Model prüft ja eher die entgegengenommenen Daten, wenn ich das richtig verstanden habe.

Aber meine Frage, ihr seht bestimmt direkt was ich falsch gemacht habe... warum scheint das nicht zu klappen mit:



1
2
<% article = Article.find_by_article_number(order_item.article_id) %>
<% product = Product.find(article.product_id) %>


und dem späteren Zugiff über:




<%= @article.preis %>


Vermutlich, etwas mit dem @ ... ja das werde ich nachher noch mal nachlesen.


Nach oben
 Profil  
 
BeitragVerfasst: 25 Jun 2015, 17:17 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Jumpy hat geschrieben:
Edit: Ahh ich hab die Lösung.


1
2
<% @article = Article.find_by_article_number(order_item.article_id.to_s) %>
<% @product = Product.find(article.product_id) %>


Das gehört hier nicht her, das gehört in den Controller.

Modell: Stellt Methoden zur Verfügung Daten aus der DB zu ziehen und stellt diese Daten Abstrahiert in einem Objektmodell dar.
View: Stellt die Daten aus den Modells dar.
Controller: Veranlasst, dass das Modell Daten aus der Datenbank zieht und übergibt sie zur Darstellung an den View.

Jumpy hat geschrieben:
Ich dachte ja zuvor schon ich müsste mich um die Verknüpfung/Relationen der Dinge auf Datenbankebene kümmern indem ich die ID der unterschiedlichen Objekte mit in die Datenbank packe.


Nein, darum kümmert sich AR wenn du in den Modells die "belongs_to", "has_one", "has_many", etc richtig gesetzt hast. Die Notwendigen Spalten um die jeweiligen Referenzinformationen zu speichern musst du in einer Migration aber selbst anlegen.

Jumpy hat geschrieben:


1
2
3
4
<% article = Article.find_by_article_number(order_item.article_id) %>
<% product = Product.find(article.product_id) %>
<td><%= link_to 'Entfernen', [order_item.order, order_item], method: :delete %><td>
<td><%
=
@article.preis %></td>


@article != article

article ist "lokal" in der aktuellen Funktion, @article ist für die gesamte Instanz der Klasse gültig. Kurz und Knapp: Es sind schlichtweg zwei unterschiedliche Variablen, genauso wie foo und bar 2 Unterschiedliche Variablen sind.

Jumpy hat geschrieben:
Aktuell habe ich noch einige Probleme die ich eh anders lösen will. Beispielsweise die Eingabe der Artikel-Nummer, hier mit (order_item.article_id). Welche schon bei der Eingabe ein Find_by prüft ob der Artikel existiert, Vorschläge ob ein anderer gemeint ist oder ob der Artikel doppelt ist. So ein Kram halt, da weiß ich immer noch nicht wo das einen guten Platz hat. Ich denke es muss als Prüfung in den Controller bei Order_item.create? Das Model prüft ja eher die entgegengenommenen Daten, wenn ich das richtig verstanden habe.


Hier habe ich nicht genau verstanden was du willst. Ich versuche mich aber mal:

Wenn der Controller die Daten vom Modell aus der Datenbank holen lässt, dann sieht der Controller ob er Daten zurückbekommt oder nicht. Bekommt er welche gehen die Daten an den View, bekommt er keine wird entsprechend die Darstellung einer Fehlermeldung veranlasst. Holst du die Daten erst im View aus der Datenbank lässt du dir diese Kontrollmöglichkeit entgehen. Vorschläge zu ähnlichen Artikeln sind wieder ein ganz anderes Thema. Das greift in den Bereich der KI, die Vorlesungen kommen aber erst nächsten Winter…

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 26 Jun 2015, 00:42 
Offline
Novize

Registriert: 30 Jun 2008, 05:55
Beiträge: 14
Danke NobbZ,

ich melde mich dann in ein paar Tagen wieder, mit etwas von dem ich denke das es die Lösung sein sollte. Also pauke ich erst noch mal die Variablen und dessen Gültigkeit.

Denn meine Vorstellung davon wie lange eine Variable gültig ist, ob diese Client-Seitig oder Server-Seitig gespeichert ist, aktuell wohl komplett nicht vorhanden.

Zitat:
Wenn der Controller die Daten vom Modell aus der Datenbank holen lässt, dann sieht der Controller ob er Daten zurückbekommt oder nicht.


Ich hatte schon an die Callback Funktionen gedacht, wie before_save. Zwar wollte ich nach dem Hinzufügen der order_items einmal pro Zeile eine Gesamtsumme errechnen.

So stelle ich mir das aktuell vor, aber bestimmt noch ganz falsch wegen der Gültigkeitsbereiche.



1
2
3
4
5
6
7
8
9
10
11
12

before_save do
order_item.summe = article.preis * order_item.anzahl
end

after_save do
order.summe = 0.0
for @order_items.each do
order.summe = order.summe + order_item.summe
end
order.save
end


Später wollte ich halt Teile aus einer Tabelle als geprüfte Kopie in eine andere Übernehmen und dort speichern. Quasi wenn die Ware eingetroffen ist.

Grüße

Jumpy


Nach oben
 Profil  
 
BeitragVerfasst: 26 Jun 2015, 07:58 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Jumpy hat geschrieben:
Denn meine Vorstellung davon wie lange eine Variable gültig ist, ob diese Client-Seitig oder Server-Seitig gespeichert ist, aktuell wohl komplett nicht vorhanden.


Im Kontext von Rails sind alle Variablen Serverseitig, es läuft ja kein Code auf dem Client…

In Rails sieht es (grob umrissen) so aus, dass sich @-Variablen („Instanzvariable“ im Rubysprech) in den Modells so verhalten wie im Rest der Ruby-Welt. @-Variablen im Controller und View bleiben für den kompletten Request erhalten. Das führt dazu, dass du im Controller angelegte @-Variablen im View benutzen kannst. Das ist aber eine Eigenart von Rails, in vielen anderen Frameworks muss man Variablen die der View sehen darf anderweitig übergeben.

Jumpy hat geschrieben:
Zitat:
Wenn der Controller die Daten vom Modell aus der Datenbank holen lässt, dann sieht der Controller ob er Daten zurückbekommt oder nicht.


Ich hatte schon an die Callback Funktionen gedacht, wie before_save. Zwar wollte ich nach dem Hinzufügen der order_items einmal pro Zeile eine Gesamtsumme errechnen.


Was du jetzt schon wieder mit einem Callback willst erschliesst sich mir nicht. Es ging doch eben noch darum zu ermitteln ob ein Artikel mit der gegebenen Artikelnummer in der Datenbank existiert…

Jumpy hat geschrieben:
So stelle ich mir das aktuell vor, aber bestimmt noch ganz falsch wegen der Gültigkeitsbereiche.



1
2
3
4
5
6
7
8
9
10
11
12

before_save do
order_item.summe = article.preis * order_item.anzahl
end

after_save do
order.summe = 0.0
for @order_items.each do
order.summe = order.summe + order_item.summe
end
order.save
end


Also ich weiß gerade wirklich nicht was das machen soll. Woher kommen da die ganzen Variablen?
Im before ist order_item nicht definiert, also nil. Der Versuch nil zu derefferenzieren endet in einer Exception, sinngemäß hast du in after ebenfalls das Problem.

Dann dein "for @order_items.each" Konstrukt ist ebenfalls nicht ganz richtig. Sowohl for als auch #each wollen jeder für sich über einen Enumerable laufen und einen Proc darauf anwenden ohne die Ursprüngliche Enumerable zu verändern. Ausserdem wäre die Syntax zu for und each jeweils etwas anders, der innere Code braucht ja auch eine Bekanntgabe der „Laufvariablen“:



1
2
3
4
5
6
7
for i in [:foo, :bar] do
puts i
end

[:foo, :bar].each do |i|
puts i
end

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
BeitragVerfasst: 29 Jun 2015, 20:19 
Offline
Novize

Registriert: 30 Jun 2008, 05:55
Beiträge: 14
Meine Zeit-Lücken waren zwischen diesem, meinem ersten Ruby on Rails Projekt einfach zu groß, da ist eine Menge wieder in Vergessenheit geraten. Mit den Variablen habe ich mich aber auf den aktuellen Stand gebracht.

Danke für den Hinweis mit ".each", es stimmt da muss vorher ein Ergebnis in die Variable gepackt werden. Die Index-Methoden in den Beispielen hatten mich zu meiner falschen Annahme verleitet. Die Syntax war nicht korrekt, ich weiß ich wollte es nur schnell grob erklären anstatt viele Wörter hier nieder zu schreiben.

Puh. Das ist schon eine ganze Menge die ich wahrscheinlich anders lösen muss als wie ich mir das zuerst dachte. Die Callback-Funktion und das grobe Beispiel sollten die Summe pro Zeile, der Bestellung zuerst ermitteln und dann in einem Vorgang speichern. Anstatt das ich dafür später an anderer Stelle das ganze noch mal machen muss. Zwar könnte ich das bei einem Request temporär vor der Anzeige aus den Werten berechnen, doch ich habe es lieber extra in der Datenbank mit drin. In einer anderen Situation spare ich mir dann den Abruf der Artikel-ID.

Wie auch dem, ich bastle erst mal weiter.


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jul 2015, 12:48 
Offline
Novize

Registriert: 30 Jun 2008, 05:55
Beiträge: 14
Gelöst:

Vorweg. Ich habe es nicht mit "Nested Forms" gelöst weil dies bei meinem Problem nicht Notwendig war.
Das Teile nicht geklappt hatten lag daran das ich mich wechselseitig an dem guide engines und dem ähnlichen Edge guide engines orientierte.

Da brauchte ich mich auch nicht wundern wenn es nicht klappt.

Bisher habe ich die zuvor erwähnte Summenbildung noch nicht in Angriff genommen, weil ich dann ja "get" und "post" vermischen müsste. Bei der Eingabe einer neuen Position habe ich aber nur Artikel-Nummer und Menge, nicht aber den Preis oder das Gebinde zur Verfügung. Daher kann ich auch keine Multiplikation vornehmen wie ich es aktuell bei der Anzeige mache.

Allerdings Hoffe ich das später mit dem "post" einer "Bestellung Abschließen", es ebenfalls als Update in die Datenbank zu tragen.

Den meisten ER-Code, welchen ich zuvor in den Views hatte, habe ich auch in den Controller bekommen.

Bis auf die Ausnahme bei der each-Schleife zur Anzeige!



1
2
<% @article = Article.find_by_article_number(order_item.article_id.to_s) %>
<% @product = Product.find(article.product_id) %>


NobbZ, wie kann ich die Datenbank-Abfrage denn schon im Controller machen? Wenn ich doch die order_item.article_id, zur Laufzeit der Each-Schleife, benötige?

Ich habe mir den Kopf ziemlich zerbrochen. Natürlich ist das bei einer "echten Nested" Implementierung klar, weil dann die ganze Bestellung als verschachtelter Hash/Datenfeld der Bestellung gespeichert wird. Das habe ich aber aktuell nicht, dafür mehr Datenbank-Zugriffe in Kauf genommen und das sich Rails darum kümmert welches order_item zu welcher Bestellung gehört.

Mit einem Hash/Datenfeld muss ich mich doch manuell um die Größe/Verwaltung kümmern. Weile eine Bestellung dann alle Positionen umfasst oder auch Leer sein kann. Ach ich behalte das mal im Auge für meine nächste Optimierung.


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jul 2015, 14:44 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Jumpy hat geschrieben:


1
2
<% @article = Article.find_by_article_number(order_item.article_id.to_s) %>
<% @product = Product.find(article.product_id) %>


NobbZ, wie kann ich die Datenbank-Abfrage denn schon im Controller machen? Wenn ich doch die order_item.article_id, zur Laufzeit der Each-Schleife, benötige?




1
2
3
4
5
class FooController < ActiveWhatWeverTheNameWas
def index
@article = Article.find(1)
end
end





<%= @article.product_id %>


Das ist alles. Das Beispiel ist zwar gerade stark vereinfacht, aber das ist das Prinzip. Davon abgesehen, wenn du per Hand ein Product suchen musst, das eigentlich mit einem Article verknüpft ist, dann stimmt etwas mit deinen Relations nicht. Eigentlich™ sollte es möglich sein wie folgt auf das Product zuzugreifen:




<%= @article.product.name %>


Wenn das nicht funktioniert sind deine /has_(one|many)/ und belongs_to nicht ordentlich gestrickt.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: