Jak w poniższym kodzie zmusić select ustawiał sobie atrybut selected=“selected” dla wartości session[:filter_by_stars]? Nie mogę się niczego doszukać w dokumentacji.
[code]<% form_for :filter_by, :url => ‘’ do |f| %>
Filter by:
star(s): 'submit();' %>
<% end %>[/code]
[quote]<%
@stars = "tu musi byc pusty string lub jakikolwiek inny, what a shit!"
def @stars.id
session[:filter_by_stars]
end
%>
[/quote]
Yyyy a to niby co ma byc ?
ze niby nadpisujesz accessor dla id w String ? Nie rozumiem tej ideii
[quote=ruthrsc][quote]<%
@stars = "tu musi byc pusty string lub jakikolwiek inny, what a shit!"
def @stars.id
session[:filter_by_stars]
end
%>
[/quote]
Yyyy a to niby co ma byc ?
ze niby nadpisujesz accessor dla id w String ? Nie rozumiem tej ideii :)[/quote] Taką “logikę” proponują autorzy Agile2…
Może sie zakręciłem, ale nie widze gdzie pada taka “propozycja”?
Według mnie ten kod pokazuje konstrukcje obiektu:
[code]<% @user = “cat”
def @user.id
4
end
def @user.name
“Dave”
end
def @user.country
“United States”
end
def @user.time_zone
res = TimeZone[-6].name
end
@order = “dog”
def @order.shipping_option
101
end
%>[/code]
A następnie kilka(naście) sposobów na generowanie formatek select. Wszystkie one są generowane dla obiektu @user, a więc domyślnie w selectach zostaną wybrane wartości nadane przy definiowaniu obiektu…
Wydaje mi się, że nie “poczułeś” jednego:
[code]<% form_for :user do |form| %>
<%= @users = User.find(:all, :order => “name”).map {|u| [u.name, u.id] }
form.select(:name, @users)
%>[/code]
wygeneruje DLA obiektu :user (czyli dla obiektu przypisanego do zmiennej @user) selecta z wartościami z @users. Ale jeśli w wartościach tabeli wystąpi:
[quote=Marcin]Według mnie ten kod pokazuje konstrukcje obiektu:
<% @user = "cat"
[/quote]
… tia, kompletnie bezsensownego. Co robi ten tekst “cat”? Nic. Równie dobrze możesz tam wpisać “dupa”. Zadziała tak samo.
[quote=Marcin]Wydaje mi się, że nie “poczułeś” jednego:
[code]<% form_for :user do |form| %>
<%= @users = User.find(:all, :order => “name”).map {|u| [u.name, u.id] }
form.select(:name, @users)
%>[/code]
wygeneruje DLA obiektu :user (czyli dla obiektu przypisanego do zmiennej @user) selecta z wartościami z @users[/quote]
Ja to wszystko rozumiem. Tylko co jeśli nie chcę przekazywać żadnego obiektu, a chcę używać składni forma z closures? Albo jak mój obiekt nie pochodzi z Active Record? Po prostu nawet nie wspomnieli o :selected. Ale dobrze że jest chociaż w API na stronie.
Ale to wszystko marność. Właśnie ciesze się jak gwizdek, bo przed chwilą dosłali mi papierowe wydanie Agile2.
No właśnie tu jest problem bo w Ruby wszystko jest obiektem! Wiec trochę się nie da obiektu nie przekazać. @user = “cat” także nie pochodzi z ActiveRecord. A jednak da się to wyświetlić. Taka jest po prostu filozofia.
Albo używasz obiekt_1[metoda] i dla takowego generujesz pola formularza (wtedy wartości, jakie posiada obiekt zostaną użyte jako default/selected). Albo generujesz na sucho formatke o nazwach pól obiekt_2[metoda] z podanymi “z palca” wartościami domyślnymi. Po wysłaniu formularza do aplikacji i tak otrzymasz OBIEKT obiekt_2.
Różnica miedzy podejściami jest taka jak miedzy formularzem dodawania obiektu i edycji obiektu…