Thread View: pl.comp.lang.ruby
4 messages
4 total messages
Started by RaW
Tue, 14 Nov 2006 19:59
RoR - problem z select
Author: RaW
Date: Tue, 14 Nov 2006 19:59
Date: Tue, 14 Nov 2006 19:59
40 lines
2066 bytes
2066 bytes
Stan rzeczywisty katalogu:
$ ls -la
drwxr-xr-x 4 raw raw 4096 2006-11-14 00:00 .
drwxr-xr-x 5 raw raw 4096 2006-09-25 20:34 ..
drwxr-xr-x 2 raw raw 4096 2006-10-25 08:57 200406
-rw-r--r-- 1 raw raw 7800 2006-11-01 09:40 ajer.gif
-rw-r--r-- 1 raw raw 2550 2006-11-01 09:37 ajer_mini.gif
drwxr-xr-x 2 raw raw 4096 2006-11-14 00:00 test
Pod irb:
irb(main):001:0> Dir.foreach("./") {|f| (puts f) if File.directory?(f)}
.
..
200406
test
=> nil
Fragment kodu aplikacji w RubyOnRails:
<% dirs = [] %>
<% Dir.foreach("./") {|f| dirs.push(f) if File.directory?(f) }%>
<%= select 'photo', 'dirname', dirs, :id => 'photo_dirname' %>
Generowany kod HTML (i tu jest problem - brak katalogu 200406):
<select id="photo_dirname" name="photo[dirname]">
<option value=".">.</option>
<option value="..">..</option>
<option value="test">test</option></select>
To tylko przykład - do katalogu dodałem jeszcze kilka innych
podkatalogów o różnych nazwach (nie tylko złożonych z cyfr) i efekt był
tak samo dziwny - w select pojawiają się tylko niektóre z nich.
Bez warunku:
if File.directory?(f)
wyswietla się poprawnie cała zawartość katalogu.
Czy ktoś może mnie oświecić co robię źle? Moim zamiarem jest oczywście
umieszczenie w select wszystkich podkatalogów (i tylko katalogów).
Z góry dzięki za odp
--
RaW
Re: RoR - problem z select
Author: Jaroslaw Zabiello
Date: Wed, 15 Nov 2006 15:48
Date: Wed, 15 Nov 2006 15:48
26 lines
1537 bytes
1537 bytes
Dnia Tue, 14 Nov 2006 20:59:53 +0100, RaW napisał(a):
> Fragment kodu aplikacji w RubyOnRails:
> <% dirs = [] %>
> <% Dir.foreach("./") {|f| dirs.push(f) if File.directory?(f) }%>
> <%= select 'photo', 'dirname', dirs, :id => 'photo_dirname' %>
>
> Generowany kod HTML (i tu jest problem - brak katalogu 200406):
Dla pewności sprawdź wpierw czy faktycznie masz wszystko co trzeba zanim
wejdziesz w metodę select. Dlaczego podajesz parametr './'? Przecież
wystarczy sam '.'.
<%= debug dirs %>
BTW, ja bym się pozbył niepotrzebnej zmiennej
<%= select 'photo',
'dirname',
Dir.entries('.').map {|f| f if File.directory?(f)}.compact,
:id => 'photo_dirname' %>
--
Jarosław Zabiełło
http://blog.zabiello.com
Re: RoR - problem z select
Author: RaW
Date: Wed, 15 Nov 2006 17:03
Date: Wed, 15 Nov 2006 17:03
43 lines
2483 bytes
2483 bytes
Jaroslaw Zabiello napisał(a):
> Dla pewności sprawdź wpierw czy faktycznie masz wszystko co trzeba zanim
> wejdziesz w metodę select. Dlaczego podajesz parametr './'? Przecież
> wystarczy sam '.'.
>
> <%= debug dirs %>
>
> BTW, ja bym się pozbył niepotrzebnej zmiennej
>
> <%= select 'photo',
> 'dirname',
> Dir.entries('.').map {|f| f if File.directory?(f)}.compact,
> :id => 'photo_dirname' %>
>
>
Teraz widzę jak bardzo byłem zmęczony tworząc poprzedni post.
Faktycznie problem nie leży w samym select, lecz w stringu okreslającym
ścieżkę. Jeśli nie jest to bieżący katalog a ścieżka, to zaczynają się
problemy. W poprzednim poście w cytacie kodu aplikacji ROR skróciłem
zawartość ścieżki do './' dezorientując trochę wszystkich - przepraszam.
Tymczasem, poczyniłem następujące obserwacje:
irb(main):001:0> Dir.pwd
=> "/home/raw"
irb(main):002:0> Dir.entries("./workspace/ajer/public/images").map{|f| f
if File.directory?(f)}.compact
=> [".", ".."]
irb(main):003:0> Dir.chdir "./workspace/ajer/public/images"
=> 0
irb(main):004:0> Dir.entries(".").map{|f| f if
File.directory?(f)}.compact => [".", "..", "200406", "200407"]
W aplikacji można użyć oczywiście takiego myku ze zmianą katalogu i
wywołać iterator w katalogu bieżącym (działa - sprawdziłem) ale to chyba
nie jest ładne rozwiązanie?
Wygląda mi to na jakąś niezgodność typu argumentu przekazywanego w
metodzie entries(), ale nie bardzo mam pojęcie co z tym zrobić i czy w
ogóle mam dobry trop.
Będę wdzięczny za pomoc.
--
RaW
Re: RoR - problem z select
Author: Marcin Mielżyński
Date: Wed, 15 Nov 2006 19:02
Date: Wed, 15 Nov 2006 19:02
38 lines
1850 bytes
1850 bytes
RaW wrote:
> Tymczasem, poczyniłem następujące obserwacje:
>
> irb(main):001:0> Dir.pwd
> => "/home/raw"
> irb(main):002:0> Dir.entries("./workspace/ajer/public/images").map{|f| f
> if File.directory?(f)}.compact
> => [".", ".."]
zachowuje się jak najbardziej poprawnie - skąd File.directory? ma
wiedzieć że 200406 jest gdzieś wpisem w kosmosie (głęboko strukturze) ?
> irb(main):003:0> Dir.chdir "./workspace/ajer/public/images"
> => 0
> irb(main):004:0> Dir.entries(".").map{|f| f if
> File.directory?(f)}.compact => [".", "..", "200406", "200407"]
>
btw. ten map jest zupełnie nie na miejscu ;)
najwygodniej trzymać kontekst w łańcuchu i sumować za każdym razem:
dir = "/somedir"
p Dir.entries(dir).select{|f|test(?d,"#{dir}/#{f}")}
można też trzymać kontekst w instancji Dir:
d = Dir.new(dir)
problem w tym że instancje Dir mają mało pożytecznych metod
lopex
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads