Code Snippets Plattform

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Also zuerst zu deiner Fehlermeldung: wrong number of arguments bedeutet ja nichts anderes als: Falsche Anzahl an Argumenten (bei einer Methode). Die Helper sind nichts anderes als Methoden. Schau am besten in der API nach, welche Argumente die Helper erwarten.

    Zu deiner Frage mit der Suche: Es ist vielmehr ein SQL-Problem, als Rails-spezifisch. Es gibt mehrere Wege, das ganze zu lösen. Du könntest dein Formular ändern und nur sprachspezifisch suchen lassen, also ein Suchfeld und ein Feld für die Auswahl der Sprache. Dann hast du zwei Parameter, die du auswerten kannst. Die andere Idee ist, einfach beide Spalten zu durchsuchen.
    Das geht z.B. mit dynamischen Helpern: find_all_by_tags_and_language(tags, language) Damit kannst du mehrere Spalten kombinieren. Das geht natürlich auch mit normalen find-Methoden. Da musst du dann die Parameter anpassen.
  • Das mit dem Formular hatte ich mir genau so vorgestellt, ein Eingabefeld in dem eingegeben wird was in den Tags gesucht wird und ein Feld in dem man die Sprache einstellen kann, hier wäre wie angesprochen ein Select_Tag ideal. Meine Frage war daher wie ich das ändern kann, das eben diese Beiden Felder für die Suche herangezogen werden.
    SQL Probleme sind schlecht, von SQL weiss ich gerade mal das es existiert, verglichen damit bin ich bei RoR ein Profi und meine vielen Fragen hier zeigen deutlich wie weit ich davon entfernt bin. :D
    Das mit dem find_all_by hab ich nicht ganz verstanden, in der API finde ich auch nur ein einfaches find_all wo allerdings auch nichts bei steht wie man das erweitern könnte.

    In der API steht für form_tag folgendes: form_tag(url_for_options = {}, options = {}, *parameters_for_url, &block)
    leider ohne Erklärungen was damit jeweils gemeint ist, wodurch Nicht-Programmierer ziemlich im Regen stehen. Es scheint aber als würden 4 Parameter nötig sein, während ich nur 3 habe. Was fehlt mir?


    Edit: Es gibt auch mal was was bei mir funktioniert, ich konnte CodeRay erfolgreich einbinden und habe jetzt Syntax Highlighting auf den Show Views. Das sieht gleich viel besser aus! Nochmals vielen Dank für den Tipp

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Erich88 ()

  • Ich habe meine Suchfunktion jetzt nochmal neu gemacht und jetzt funktioniert zumindest die Suche nach Tags:

    _search.html.erb

    Quellcode

    1. <% form_tag :controller => 'code_snippets', :method => 'get' do %>
    2. <p>
    3. <%= text_field_tag :search, params[:search] %>
    4. <%= select_tag (:lang, options_for_select(["C", "Java", "Ruby"]), {:multiple => false}) %>
    5. <%= submit_tag "Search", :name => nil %>
    6. </p>
    7. <% end %>


    im code_snippets_controller.rb

    Quellcode

    1. def index
    2. if params[:search]
    3. search_condition = "%#{params[:search]}%"
    4. @code_snippets = CodeSnippet.find(:all, :conditions => ['tags LIKE ?', search_condition])
    5. else
    6. @code_snippets = CodeSnippet.find(:all)
    7. end
    8. end
    9. def search
    10. @code_snippets = CodeSnippet.search params[:search]
    11. end
    Alles anzeigen


    code_snippets.rb

    Quellcode

    1. def self.search(search)
    2. if search
    3. find(:all, :conditions => ['tags LIKE ?', "%#{params[:search]}%"])
    4. else
    5. find(:all)
    6. end
    7. end


    Der Versuch auch die Sprache miteinzubeziehen hat bislang leider nicht geklappt. wenn ich das ganze folgendermaßen ändere

    controller

    Quellcode

    1. def index
    2. if params[:search]
    3. search_condition = "%#{params[:search]}%"
    4. @code_snippets = CodeSnippet.find(:all, :conditions => ['tags LIKE ? AND language LIKE ?', search_condition, :lang])
    5. else
    6. @code_snippets = CodeSnippet.find(:all)
    7. end
    8. end


    Quellcode

    1. model
    2. def self.search(search, lang)
    3. if search
    4. find(:all, :conditions => ['tags LIKE ? AND language LIKE ?', search_condition, :lang])
    5. else
    6. find(:all)
    7. end
    8. end


    dann wird mir in der Liste gar nichts mehr angezeigt. Zudem hab ich auch keine Möglichkeit gefunden, dass das select_tag den Wert anzeigt den ich bei der Suche angegeben habe. Da kommt immer der erste Wert in der Liste, also "C". Eventuell besteht da ja ein Zusammenhang

    In der Datenbank sind übrigens Hello World Beispiele für alle Sprachen vorhanden, es müßte also ein Eintrag angezeigt werden, dennoch bleibt die Liste leer.
    Vielen Dank im Voraus für die Hilfe!
  • Schau wegen dem fehlenden Ergebnis doch am besten mal in das Log oder in die Serverausgabe. Dort werden dir alle SQL-Statements angezeigt. Zumindest solang du im Development-Modus bist. Schau doch mal, wie die entsprechende Suche als SQL aussieht und führe das SQL direkt auf der DB aus. Du musst herausfinden, an welcher Stelle der Fehler liegt (SQL oder Ruby-Code).

    Zu deinem options_for_select: Du kannst über den Parameter :selected auswählen welcher Wert selektiert ist. Schau dir den Parameter mal in der API an oder spiel damit herum:
    z.B. indem du die Sprache in der Variable lang speicherst und an das Partial übergibst.

    Quellcode

    1. <%= select_tag (:lang, options_for_select(["C", "Java", "Ruby"], :selected => lang), {:multiple => false}) %>
  • mad schrieb:

    Quellcode

    1. <%= select_tag (:lang, options_for_select(["C", "Java", "Ruby"], :selected => lang), {:multiple => false}) %>


    Danke, aber wenn ich das so ändere, bekomme ich plötzlich die Fehlermeldung "undefined local variable or method `lang' for #<ActionView::Base:0x6d225e8>" Da fehlt mir offenbar noch irgendwo was, aber lang gab es ja vorher schon...

    Was ist eigentlich der unterschied zwischen :lang und lang?
  • Naja, du musst natürlich noch die Sprache übergeben. Im Controller also sowas

    Quellcode

    1. @lang = params[:lang]


    und in der View, in der du das Partial renderst:

    Quellcode

    1. <%= render :partial => 'search', :locals => {lang => @lang} %>


    Der Unterschied zwischen :lang und lang ist folgender:
    :lang ist ein Symbol, was Symbole sind, liest du am besten unter Symbole sind keine Strings nach
    lang ist eine lokale Variable im Partial, die man (wie oben gezeigt) mit :locals => {var => "bla"} an das Partial übergeben kann
  • Vielen Dank, wo im Controller muß ich das hinschreiben?
    Ich habe es zuerst versucht es innerhalb der Def von index und search zu schreiben, hab dann Fehlermeldungen bekommen, dann hab ich es gleich am Anfang des Controllers vor den ganzen def gesetzt, und wieder eine Fehlermeldung erhalten.

    Nachdem die restful auth jetzt funktioniert, wollte ich das Eingabeformular ändern den usernamen als author kopieren, mit <% :author => current_user.login %> bekomme ich aber nur eine Fehlermeldung.

    lg
  • Also mal ganz langsam. Variablen, die in der View verfügbar sein sollen, müssen in die entsprechende Methode. Also eine Variable, die in der View "index" verfügbar sein soll, muss in die Methode (def) index usw.
    In der View kannst du Variablen dann nutzen. Mit <%= variable %> kannst du sie ausgeben, mit <% variable %> in anderen Konstrukten verwenden. Was du genau tun willst, geht aus deinem kleinen Ausschnitt nicht hervor.
  • Die Code_Snippet Objekte besitzen ja eine Variable author. Bislang wird diese wie die meisten anderen Variablen einfach durch ein text_field gefüllt wo hintendran eben dann :author stand. Das funktioniert auch, der Versuch mittels <% :author => current_user.login %> den Loginnamen in die Variable author zu kopieren und das Eingabefeld dadurch zu ersetzen ist aber gründlich misslungen.
  • Da heute der letzte Tag ist, werde ich Seminararbeit und Prototyp heute abschliessen.

    Der Stand der Applikation ist jetzt der, das die Datenbank funktioniert, Snippets erstellt, editiert, angezeigt und geschlöscht werden können sowie Syntax Highlighting vorhanden ist.
    Die Suchfunktion funktioniert nur eingeschränkt, da ich es nicht hinbekommen habe auch die Sprache miteinzubinden, also werde ich es für die Abgabe rückbauen auf eine reine Tag abfrage, das wird wohl auch reichen hoffe ich.
    Das Problem mit der Authentifizierung besteht ebenfalls noch, da überlege ich die rauszunehmen oder einfach darauf hinzuweisen, das das noch nicht ganz funktioniert, ist ja ein Prototyp und ich hab keine Ahnung wie ich das noch ändern könnte.

    Ich möchte mich nochmals bei allen bedanken die mir hier geholfen haben, insbesondere bei mad, ohne dessen unzähligen Tips ich wohl nichts hätte, das ich abgeben kann, Vielen, vielen Dank für deine Mühe und Geduld!!!
  • Das kann ich gerne machen, allerdings werde ich zuvor die Benotung abwarten, da ich befürchte, das ich nochmal nacharbeiten muß. Mit dem ersten Teil der Arbeit über Code Snippets und vorhandene Plattformen bin ich eigentlich zufrieden, der Teil über die Umsetzung ist dann aber doch sehr mager geworden, was vorallem am Zeitdruck lag, immerhin schreibe ich selbst jetzt noch daran. Abgabe ist ja der 30. da geht auch noch 5 min für Mitternacht hochladen. Die eigentlich geplanten rechtlichen Aspekte hab ich überhaupt weg gelassen, dafür war keine Zeit mehr.
  • Ich habe inzwischen endlich eine Beurteilung erhalten und wie erwartet, war meine Arbeit und mein Projekt leider negativ. Ich habe jetzt aber die Chance es nochmal zu überarbeiten und zu verbessern, allerdings dafür nicht viel Zeit weil sich der Prof wohl extra viel Zeit gelassen hat mit der Beurteilung.
    Die Arbeit habe ich inzwischen schon grösstenteils überarbeitet, am Projekt wären eben die bereits angesprochenen Punkte zu machen. Im einzelnen waren das

    - Die Suchfunktion funktioniert nur über die Tags, die Auswahl einer Programmiersprache wird leider nicht berücksichtigt und meine Versuche das hinzubekommen sind alle gescheitert, sowie ich das hinzufügen will bekomme ich wie erwähnt Error Meldungen beim Aufruf der Seiten

    - Die Benutzerverwaltung funktioniert zwar, aber jedesmal wenn auf die Login bzw. Logout Seiten zugegriffen wird, komme ich nachher nicht mehr zurück in meine Plattform sondern lande im Root Verzeichnis, weiss jemand wo ich das ändern kann?

    Eigentlich sollte auch noch eine Funktion hinein, wo User Kommentare zum Code hinterlassen können, aber das ist wohl zuviel Aufwand und wenn ich die obigen Punkte schaffen kann, wäre das wohl auch schon ausreichend für eine positive Beurteilung.

    Vielen Dank für Eure Hilfe.

    LG
  • Am Besten du machst für jedes Problem einen eigenen Thread auf. Bis wann hast du die Chance das Projekt zu korrigieren?

    Zu den einzelnen Problemen:
    - Wie suchst du und welche Fehlermeldungen bekommst du? Fasse bitte kurz deine aktuellen Modelle und Controller zusammen, dann kann man sich schnell ein Bild machen, um zu helfen

    - Wie machst du deine Benutzerverwaltung? Hast du ein Gem oder Plugin dafür? Beschreibe bitte genau, wie der Ablauf aussieht und wie er aussehen soll.


    Alternativ: Kannst du das Projekt irgendwo hochladen? Wir können es auch bei easy-coding.de oder auf meinem Server bereitstellen, dann hat man eine Online-Version... siehe auch: RoR hosten