Ruby Forum Rails Germany > find all conditions..

Posted by Werner Laude (Guest)
on 30.04.2008 20:01
(Received via mailing list)
Bevor ihr alle in den Mai tanzt..

Ich komme hier gerade nicht weiter. Vielleicht kann mir jemand eine
Idee geben.

Die Tabelle hat chars für die Spalten Kinder, Jugendliche, etc.
also 1 oder 0 als Wert

Abfrage im Formular:
  <%= f.select(:zielgruppe, [['Kinder', 'kinder'],
                               ['Jugendliche', 'jugend'],
                               ['Erwachsene', 'erwachsene'],
etc. etc.

Wie schreibe ich da am besten das find statement

@result = Model.find(:all, :conditions => [params[:zielgruppe] => true])
  erhalte ich : undefined method `%' for {nil=>true}:Hash

Da steh ich gerade aufm Schlauch, zumal ich 5 dieser selects habe...

Gruß und Danke




Werner Laude
Lindenburger Allee 22  -  50931 Köln

0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Posted by Thomas R. Koll (Guest)
on 30.04.2008 20:19
(Received via mailing list)
Hi Werner,

Was rails aus dem conditions machen möchte ist etwas das hier
{params[:zielgruppe] => true} %

Geht natürlich nicht. Das hier aber sollte:
Model.find(:all, :conditions => ['zielgruppe = ?', params[:zielgruppe]])

ciao, tom

Am 30.04.2008 um 20:00 schrieb Werner Laude:
>                               ['Jugendliche', 'jugend'],
>                               ['Erwachsene', 'erwachsene'],
> etc. etc.
>
> Wie schreibe ich da am besten das find statement
>
> @result = Model.find(:all, :conditions => [params[:zielgruppe] =>  
> true])
>  erhalte ich : undefined method `%' for {nil=>true}:Hash
>
> Da steh ich gerade aufm Schlauch, zumal ich 5 dieser selects habe...


--
Thomas R. "TomK32" Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: tomk32@gmx.de
Posted by Werner Laude (Guest)
on 30.04.2008 20:38
(Received via mailing list)
Am 30.04.2008 um 20:18 schrieb Thomas R. Koll:
Hallo Tom..

danke soweit.. aber das ist nur das halbe Problem.
Ich verstehe noch nicht wie ich 15 Spalten gleichzeitig abfragen kann.
Soviele Auswahlmöglichkeiten hat der select_tag

Das select gibt zb. den Wert 'jugend' zurück. Nun gibt es eine Spalte
jugend in der div. Datensätz eine 1 stehen haben. Die sollen geliefert
werden. Nicht aber die Werte aus der Spalte kinder.
Gibt es da einen Weg ?

Gruß 



>
>> <%= f.select(:zielgruppe, [['Kinder', 'kinder'],
>> Da steh ich gerade aufm Schlauch, zumal ich 5 dieser selects habe...
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug
>

Werner Laude
Lindenburger Allee 22  -  50931 
Köln
0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Posted by Thomas R. Koll (Guest)
on 30.04.2008 20:43
(Received via mailing list)
Hi Werner,

Ich denke du hast einen falschen Ansatz beim Design deiner Datenbank.

Was dir fehlt ist offenbar ein model Audience mit einer Relation zu
deinem
bisherigen model.

ciao, tom

Am 30.04.2008 um 20:37 schrieb Werner Laude:
> geliefert werden. Nicht aber die Werte aus der Spalte kinder.
> Gibt es da einen Weg ?

--
Thomas R. "TomK32" Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: tomk32@gmx.de
Posted by Werner Laude (Guest)
on 30.04.2008 20:59
(Received via mailing list)
Am 30.04.2008 um 20:42 schrieb Thomas R. Koll:
>

die db war so aufgebaut (access..)


>
> Was dir fehlt ist offenbar ein model Audience mit einer Relation zu  
> deinem
> bisherigen model.


mhh damit kann ich jetzt erst mal nix anfangen..

wo kann ich da was finden..?
Gruß 



>> Ich verstehe noch nicht wie ich 15 Spalten gleichzeitig abfragen  
> Skype: TomK32 || Mail: tomk32@gmx.de
>
> _______________________________________________
> rubyonrails-ug mailing list
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug
>

Werner Laude
Lindenburger Allee 22  -  50931 
Köln
0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Posted by Phillip Oertel (phillipoertel)
on 30.04.2008 21:10
(Received via mailing list)
hi,

>> Die Tabelle hat chars für die Spalten Kinder, Jugendliche, etc.
>> also 1 oder 0 als Wert

du hast also so eine tabelle?

id | kinder | jugend | erwachsene | ...
1  | 0          | 1           | 0 | ...
...

wenn ja, wäre's vermutlich besser die struktur zu ändern, es sei denn
das ist bewusst so. wie?
- wenn es pro model nur eine zielgruppe gibt, kannst du die felder auf
eines eindampfen (das dann zielgruppe heisst und als wert enthält:
0/1/2 zur identifikation von kinder/jugend/erwachsene, oder direkt den
string, oder die zielgruppen_id eines per has_one verknüpften
zielgruppen-objekts).
- wenn es pro model mehrere zielgruppen geben kann, würde eine
has_many relation mit eigenem zielgruppen-objekt sinn machen.

um dein bestehendes problem ohne tabellen-strukturänderung zu lösen,
müsstest du etwa folgendes machen (bäh ;-)). problem ist u.a., dass du
bei einer änderung der verfügbaren zielgruppen deinen code anpassen
musst.

@result = Model.find(:all, :conditions => {
   'kinder' => (params['zielgruppe'] == 'kinder'),
   'jugend' => (params['zielgruppe'] == 'jugend'),
   // ...
}

viele 
grüße,phillip

---

Am 30.04.2008 um 20:18 schrieb Thomas R. Koll:
Posted by David A. Black (Guest)
on 30.04.2008 21:12
(Received via mailing list)
Hi --

On Wed, 30 Apr 2008, Werner Laude wrote:

> aber die Werte aus der Spalte kinder.
> Gibt es da einen Weg ?

Wenn ich das Problem richtig verstanden habe, vielleicht koenntest du
es so machen:

   Model.find(:all, :conditions => ['zielgruppe in (?)', 
params[:zielgruppe]])


David
Posted by Werner Laude (Guest)
on 30.04.2008 21:22
(Received via mailing list)
Am 30.04.2008 um 21:11 schrieb David A. Black:
>

Hallo David..

denke das sollte klappen

$sql = 'SELECT * FROM `tabelle` WHERE `kinder` = \ '1\' LIMIT 0, 30 ';


> Wenn ich das Problem richtig verstanden habe, vielleicht koenntest du
> es so machen:
>
>  Model.find(:all, :conditions => ['zielgruppe in (?)',  
> params[:zielgruppe]])


Ich teste das morgen mal . Für heute langts..

Danke

> See http://www.rubypal.com for details and updates! 
> _______________________________________________
> rubyonrails-ug mailing list
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Werner Laude
Lindenburger Allee 22  -  50931 
Köln
0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Posted by David A. Black (Guest)
on 30.04.2008 21:29
(Received via mailing list)
Hi --

On Wed, 30 Apr 2008, Werner Laude wrote:

>
>> Wenn ich das Problem richtig verstanden habe, vielleicht koenntest du
>> es so machen:
>> 
>> Model.find(:all, :conditions => ['zielgruppe in (?)', params[:zielgruppe]])
>
>
> Ich teste das morgen mal . Für heute langts..

Ich glaube jetzt, die Details missverstanden zu haben... es gibt
naemlich keine "zielgruppe"-Spalte, wie ich glaubte. Vielleicht kann
dieses "in (?)" immerhin irgendwie helfen :-)


David
Posted by David A. Black (Guest)
on 01.05.2008 05:06
(Received via mailing list)
Hi --

On Wed, 30 Apr 2008, Werner Laude wrote:

>                             ['Jugendliche', 'jugend'],
>                             ['Erwachsene', 'erwachsene'],
> etc. etc.
>
> Wie schreibe ich da am besten das find statement
>
> @result = Model.find(:all, :conditions => [params[:zielgruppe] => true])
> erhalte ich : undefined method `%' for {nil=>true}:Hash

OK, neue Idee:

   Model.find(:all,
    :conditions => [*params[:zielgruppe]].join(" = 1 OR ")) + " = 1"

(Mit beliebiger SQL-reinigung.)

Und dazu, im View:

   <%= select_tag("zielgruppe[]",
       options_for_select([['Kinder', 'kinder'],
                           ['Jugendliche', 'jugend'],
                           ['Erwachsene', 'erwachsene']]),
       :multiple => true) %>

oder aehliches.


David
Posted by Werner Laude (Guest)
on 01.05.2008 10:18
(Received via mailing list)
Am 01.05.2008 um 05:05 schrieb David A. Black:

Hi David..

danke für den Vorschlag..

bisher klappt es so:

begin

         @result = User.find(:all, :conditions => ["#{params[:user]
[:zielgruppe]} = ?", 1])
  rescue

Das rescue weil auch null Werte abgefangen werden sollen..

Was jetzt aber noch kommt ist, das ich ca 15-20 dieser Art Abfragen in
die conditions einbauen muß. Selects und Check Boxen.
Ich hatte die Idee das mit einem array zu machen.

:conditions => ["array1", array2]

Aber noch nichts konkretes wie diese arrays aufzubauen
wären..nullwerte abfangen..

Schönen Feiertag..
Gruß 





>> also 1 oder 0 als Wert
>> true])
>
>
> -- 
> Rails training from David A. Black and Ruby Power and Light:
>  INTRO TO RAILS         June 9-12            Berlin
>  ADVANCING WITH RAILS   June 16-19           Berlin
>  INTRO TO RAILS         June 24-27           London (Skills Matter)
> See http://www.rubypal.com for details and updates! 
> _______________________________________________
> rubyonrails-ug mailing list
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Werner Laude
Lindenburger Allee 22  -  50931 
Köln
0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Posted by David A. Black (Guest)
on 01.05.2008 14:02
(Received via mailing list)
Hi --

On Thu, 1 May 2008, Werner Laude wrote:

>
> :conditions => ["array1", array2]
>
> Aber noch nichts konkretes wie diese arrays aufzubauen wären..nullwerte 
> abfangen..

array1 ist aber vermuetlich ein echtes Array (und kein String).
Deswegen hatte ich geglaubt, dass "join" klappen wuerde:

  :conditions => [*params[:user][:zielgruppe]].join(" = 1 OR ")) + " = 
1"

Wenn zB. man "jugend" und "erwachsene" waehlt, wird das Array
["jugend", "erwachsene"] dem Controller in params[:user][:zielgruppe]
geliefert, und folgendes SQL gebaut:

   SELECT * FROM things WHERE (jugend = 1 OR erwachsene = 1);


David
Posted by Werner Laude (Guest)
on 02.05.2008 09:45
(Received via mailing list)
Am 01.05.2008 um 14:01 schrieb David A. Black:

Hi David.
danke für den input. In diesem Fall ist kein Mehrfachauswahl nötig.
sondern...

>
>
> :conditions => [*params[:user][:zielgruppe]].join(" = 1 OR ")) + " =  
> 1"
>
> Wenn zB. man "jugend" und "erwachsene" waehlt, wird das Array
> ["jugend", "erwachsene"] dem Controller in params[:user][:zielgruppe]
> geliefert, und folgendes SQL gebaut:
>
>  SELECT * FROM things WHERE (jugend = 1 OR erwachsene = 1);

Ich bin am überlegen wie ich
select 1
select 2
select 3 etc.

checkbox 1
checkbox2 etc.

in den conditions-string einbaue.

Die options entsprechen jeweils einer db Spalte (char 0 / 1)

select 1 bis 5 , checkboxes eh, können jeweils ..müssen aber keinen
Wert haben.
Habe noch keine Erfahrung solche komplexen Abfragen zusammenzubauen.

Wenn du magst und Zeit hast (oder auch eine anderer
Mitleser..) ,können wir gerne über eine Kleinauftrag sprechen..

Gruß 


Werner Laude
Lindenburger Allee 22  -  50931 
Köln
0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Posted by Andreas Roedl (Guest)
on 11.05.2008 03:49
(Received via mailing list)
Hallo,

On Wed, Apr 30, 2008 at 8:00 PM, Werner Laude <newsgroup@wernerlaude.de> 
wrote:
> Die Tabelle hat chars für die Spalten Kinder, Jugendliche, etc.
> also 1 oder 0 als Wert
> Abfrage im Formular:
>  <%= f.select(:zielgruppe, [['Kinder', 'kinder'],
>                               ['Jugendliche', 'jugend'],
>                               ['Erwachsene', 'erwachsene'],

ich komme zwar etwas spät mit dieser Mail, aber hoffentlich noch nicht
zu spät. Wie wäre es mit dem has_flags-Plugin?

  http://64.164.6.244:9080/has_flags

Es behandelt Deine Flags als Bit-Field in der Datenbank und die
Abfrage ist recht leicht zu bewerkstellingen: Model.find_by_flags.


Andreas Roedl
Posted by Werner Laude (Guest)
on 11.05.2008 12:43
(Received via mailing list)
Am 11.05.2008 um 03:49 schrieb Andreas Roedl:
>>
>
> ich komme zwar etwas spät mit dieser Mail, aber hoffentlich noch nicht
> zu spät. Wie wäre es mit dem has_flags-Plugin?


Hallo Andreas..

velen Dank für deinen Vorschlag. Ich habe das mit  condition_bilder
(plugin) gelöst..

http://www.psychotherapiesuche.de/spezialsuche

Gruß 


Werner Laude
Lindenburger Allee 22  -  50931 
Köln
0221.8805 635

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

http://www.webagentur-laude.de

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~