Thread View: pl.comp.lang.ruby
14 messages
14 total messages
Started by tomek gomek
Sun, 21 Jan 2007 11:43
RoR insert po utworzeniu
Author: tomek gomek
Date: Sun, 21 Jan 2007 11:43
Date: Sun, 21 Jan 2007 11:43
21 lines
1749 bytes
1749 bytes
Witam. RoR - mam tabelę dajmy na to "tabela" (id_usera, id_czegos2) Tworzę usera i pytanie moje jest następujące: Jak po utworzeniu usera wpisać do tabeli "tabela" dane "ręcznie"? Domyślam się w metodzie create po poprawnym zapisaniu usera, tylko jak? Czy tabela "tabela" jest "widoczna" w kontrolerze users? Jak generalnie uruchamiać własne zapytania typu insert? Find_by_sql służy tylko do selectów? Chyba nie zagmatwałem, to początki :) Przy okazji drugie pytanie: Rzeźbię rozdział z Rails Recipies na temat "Role-Based Authorization" Jest tam tabelka rights_roles gdzie zapisywane są role i prawa dla tych rol. Nie ma pola id. Są tylko (right_id, role_id) Jak w metodzie list to wyswietlić? Standardowa (bez zmian) pokazuje owszem rekordów tyle ile trzeba ale same "Show", "Edit", "destroy", nawet bez "numerków" :) -- -= pozdrawiam tomek =-
Re: RoR insert po utworzeniu
Author: Rafał Komorowski
Date: Mon, 22 Jan 2007 10:04
Date: Mon, 22 Jan 2007 10:04
29 lines
2776 bytes
2776 bytes
> Czy tabela "tabela" jest "widoczna" w kontrolerze users? > Jak generalnie uruchamiać własne zapytania typu insert? > Find_by_sql służy tylko do selectów? [ciach] > Rzeźbię rozdział z Rails Recipies na temat "Role-Based Authorization" Tomek, skoro masz tak podstawowe pytania, to radzę zostawić na razie "Rails Recipes", bo to jest książka z przykładami rozwiązania mniej banalnych problemów. Na początek przeczytaj "Agile Web Development with Rails", bo to jest podstawowa książka ucząca co i jak. Co do pytań, to: 1) Tabela "tabela" może być widoczna w kontrolerze 'users" poprzez relację. Jeśli stosujesz się do konwencji railsowej to nawet nie trzeba zapytania. W tabeli Tabela powinieneś mieć pole 'user_id" (nie: id_usera), wtedy Rails samo wie, że to relacja do innej tabeli (Users) poprzez pole "id". Wtedy można spokojnie pisać na przykład: @element_tabeli.user.nazwisko (zakładam, że tabela Users zawiera pole "nazwisko", oczywiście poza polem "id" służącym do budowania relacji). 2) SQL w Raisach jest zasadniczo szczątkowo potrzebny tylko do bardziej zagmatwanych rzeczy. Proste relacje są załatwiane w pełni przez mechanizm ORM (Object Relational Mapping), który w Rails funkcjonuje pod nazwą ActiveRecord. Nie mam dużego doświadczenia w Rails, ale nie sądzę, żeby potrzebne były ręczne INSERTy w jakiejkolwiek aplikacji, a jeśli jest taka potrzeba, to znaczy że projektant/programista źle zbudował model obiektów reprezentowany przez bazę danych.
Re: RoR insert po utworzeniu
Author: Jaroslaw Zabiello
Date: Mon, 22 Jan 2007 12:40
Date: Mon, 22 Jan 2007 12:40
24 lines
1652 bytes
1652 bytes
Dnia Sun, 21 Jan 2007 12:43:44 +0100, tomek gomek napisał(a): > Jak po utworzeniu usera wpisać do tabeli "tabela" dane "ręcznie"? > Domyślam się w metodzie create po poprawnym zapisaniu usera, tylko jak? > Czy tabela "tabela" jest "widoczna" w kontrolerze users? Poczytaj o Active Record. > Jak generalnie uruchamiać własne zapytania typu insert? z poziomu kontrolera: connect.execute "twoj sql" ale to jest jakas skrajnosc. Normalnie uzywa sie do tego ORM'a a nie czystego SQL. Poczytaj o Active Record. > Find_by_sql służy tylko do selectów? Nie. Odpali dowolną kwerendę SQL. Tylko, że to się stosuje w wyjątkowych sytuacjach (tzn. czysty sql) . Tzn. stosuje się przy b. skomplikowanych kwerendach, które nie da się, lub trudno jest zrobić za pomocą Active Record. -- Jarosław Zabiełło http://blog.zabiello.com
Re: RoR insert po utworzeniu
Author: tomek gomek
Date: Mon, 22 Jan 2007 16:11
Date: Mon, 22 Jan 2007 16:11
85 lines
3677 bytes
3677 bytes
Dnia Mon, 22 Jan 2007 02:04:17 -0800, Rafał Komorowski napisał(a):
> Tomek, skoro masz tak podstawowe pytania, to radzę zostawić na razie
> "Rails Recipes", bo to jest książka z przykładami rozwiązania mniej
> banalnych problemów. Na początek przeczytaj "Agile Web Development
> with Rails", bo to jest podstawowa książka ucząca co i jak. Co do
> pytań, to:
Czytam, czytam a jakże :) Problem w tym, że muszę czytać i to i to
ponieważ tworzę aplikację dosyć pilnie i uparłem się na Railsy bo
wszyscy wokół mnie robią w php :) No i potrzebuję role itp.
>
> 1) Tabela "tabela" może być widoczna w kontrolerze 'users" poprzez
> relację. Jeśli stosujesz się do konwencji railsowej to nawet nie
Stosuję się, tu był tylko przykład, oczywiście pola są nazwane jak
piszesz.
> 2) SQL w Raisach jest zasadniczo szczątkowo potrzebny tylko do bardziej
> zagmatwanych rzeczy. Proste relacje są załatwiane w pełni przez
> mechanizm ORM (Object Relational Mapping), który w Rails funkcjonuje
> pod nazwą ActiveRecord. Nie mam dużego doświadczenia w Rails, ale nie
> sądzę, żeby potrzebne były ręczne INSERTy w jakiejkolwiek
> aplikacji, a jeśli jest taka potrzeba, to znaczy że
> projektant/programista źle zbudował model obiektów reprezentowany
> przez bazę danych.
Pewnie masz rację, dojdę pewnie kiedyś do tego :)
Czyli taki listing jest bez sensu? :)
Tabele:
rights (id, name, controller, action)
roles (id, name, info)
rights_roles (right_id, role_id) (tak bylo w książce, bez id bo to
lookupy)
[code w kontrolerze rightsroles]
def listing
# lista kontrolerow tylko
kontrolery = "select roles.id as id, roles.name as rola from rights_roles
left join rights on rights.id=right_id
left join roles on roles.id=role_id
group by rola
order by rola"
@role = RightsRole.find_by_sql(kontrolery)
akcje = "select right_id, role_id, rights.name as rname, controller,
action from rights_roles
left join rights on rights.id=right_id left join roles on
roles.id=role_id
where roles.id='"+params[:id]+"'
order by controller"
@akcje_by_kont = Right.find_by_sql(akcje)
end
[end code]
W planie mam zrobić listę kontrolerów zdefiniowanych w tabeli i po
kliknięciu w link kontrolera ma się pokazać lista zdefiniowanych do
niego akcji.
Acha, jeszcze:
class Right < ActiveRecord::Base
# relacje
has_and_belongs_to_many :roles
end
class Role < ActiveRecord::Base
# relacje
has_and_belongs_to_many :users
has_and_belongs_to_many :rights
end
Niby to działa, może ktoś coś podpowie? Jakieś hasło oprócz
ActiveRecord? ;)
--
-= pozdrawiam tomek =-
Re: RoR insert po utworzeniu + trochę bloga :)
Author: tomek gomek
Date: Mon, 22 Jan 2007 18:35
Date: Mon, 22 Jan 2007 18:35
33 lines
2148 bytes
2148 bytes
Dnia Mon, 22 Jan 2007 12:40:22 +0000, Jaroslaw Zabiello napisał(a):
> Dnia Sun, 21 Jan 2007 12:43:44 +0100, tomek gomek napisał(a):
>
>> Jak po utworzeniu usera wpisać do tabeli "tabela" dane "ręcznie"?
>> Domyślam się w metodzie create po poprawnym zapisaniu usera, tylko jak?
>> Czy tabela "tabela" jest "widoczna" w kontrolerze users?
>
> Poczytaj o Active Record.
>
Ok, trochę poczytałem i proszę tylko o odpowiedź czy to jest poprawne:
if @user.save
# dodaj do tablie roles_users uzytkownika i role
@rolesusers = RolesUser.create(
:user_id => @user.id,
:role_id => @user.roles_id
)
flash[:notice] = "User was successfully created id= #{@user.id}."
redirect_to :action => 'list'
Sorry za pytania przed poczytaniem, postaram się ich uniknąć ale
naprawdę zależy mi na stworzeniu aplikacji do czerwca (dyplom szykuję w
Railsach :)) no i oczywiście jak dobrze pójdzie to kontynuować
przygodę z ruby. Są to moje pierwsze potyczki z rubym. Mszę powiedzieć,
że cudne te Railsy są tylko w sumie to niewiele o nich wiem.
--
-= pozdrawiam tomek =-
Re: RoR insert po utworzeniu + trochę bloga :)
Author: tomek gomek
Date: Mon, 22 Jan 2007 18:37
Date: Mon, 22 Jan 2007 18:37
9 lines
1318 bytes
1318 bytes
Dnia Mon, 22 Jan 2007 19:35:11 +0100, tomek gomek napisał(a): > Ok, trochę poczytałem i proszę tylko o odpowiedź czy to jest poprawne: Żeby nie było odpowiedzi "sprawdź" to sprawdziłem i działa, chodzi mi tylko o to czy to jest "zgodne z zasadami" -- -= pozdrawiam tomek =-
Re: RoR insert po utworzeniu + trochę bloga :)
Author: punkracy
Date: Mon, 22 Jan 2007 19:58
Date: Mon, 22 Jan 2007 19:58
43 lines
2771 bytes
2771 bytes
tomek gomek napisał(a):
> Dnia Mon, 22 Jan 2007 19:35:11 +0100, tomek gomek napisał(a):
>
> > Ok, trochę poczytałem i proszę tylko o odpowiedź czy to jest poprawne:
>
> Żeby nie było odpowiedzi "sprawdź" to sprawdziłem i działa, chodzi mi
> tylko o to czy to jest "zgodne z zasadami"
no chyba tak na sztywno to nie ma sensu.
w modelu user dajesz:
has_and_belongs_to_many :roles
w modelu role
has_and_belongs_to_many :users
teraz będziesz miał dostęp do tych zależności, np.:
@user.roles.collect{|role| role.title}.join(', ')
wypisze oddzielając przecinkami, wszystkie role, które posiada user.
dodawać możesz np. w formularzu tworzącym użytkownika:
<p><label for="user[role_ids][]">Role</label><br />
<%= select_tag 'user[role_ids][]',
options_from_collection_for_select(@roles, :id, :title,
@user.roles.collect{|role| role.id}),
{:multiple => true, :size =>5}
%></p>
oczywiście @user i @roles musi być widoczne w tym widoku, a więc w
kontrolerze:
@user = User.new lub @user = User.new(params[:user])
oraz
@roles = Role.find(:all)
mam nadzieje, że nie namieszałem Ci zbytnio
pozdrawiam
ps. poczytaj:
http://brainspl.at/articles/2006/02/20/new-plugin-acl_system
--
Krzysztof Rączkiewicz
http://punkracy.com # Prawie jak Blog 27
http://10110.biz/pmug # Polish Mainframe User Group
Re: RoR insert po utworzeniu
Author: tomek gomek
Date: Mon, 22 Jan 2007 20:01
Date: Mon, 22 Jan 2007 20:01
12 lines
1362 bytes
1362 bytes
Dnia Mon, 22 Jan 2007 17:11:51 +0100, tomek gomek napisał(a): > > W planie mam zrobić listę kontrolerów zdefiniowanych w tabeli i po > kliknięciu w link kontrolera ma się pokazać lista zdefiniowanych do > niego akcji. oczywiście głupoty piszę, lista ról miała być nie kontrolerów ale chodziło mi o grupowanie -- -= pozdrawiam tomek =-
Re: Re: RoR insert po utworzeniu + trochę bloga :)
Author: tomek gomek
Date: Mon, 22 Jan 2007 21:05
Date: Mon, 22 Jan 2007 21:05
26 lines
2049 bytes
2049 bytes
Dnia Mon, 22 Jan 2007 11:58:28 -0800, punkracy napisał(a): > > mam nadzieje, że nie namieszałem Ci zbytnio > > pozdrawiam > > ps. poczytaj: > http://brainspl.at/articles/2006/02/20/new-plugin-acl_system Nie namieszałeś, myślę, ze kody przykładowe rozumiem dosyć dobrze, problem w tym, że nie bardzo jeszcze wiem czego szukać w dokumentacji i książce, więc latam jak potłuczony od rozdziału do rozdziału czytając po łebkach. Muszę jednak przysiąść do rozdziału o ActiveRecord i dokładnie się z nim zapoznać. Artykuł, owszem, ciekawy, tylko u mnie kontrola będzie chyba (?) bardziej rozbudowana, więc przykład z 'Recipies' choć niezbyt szczegółowy jest bardziej odpowiedni. Ról będę miał kilka, jednak uprawnienia to oddzielna historia. Podpatrzę na pewno, bo będę potrzebował ukrywania pewnych treści w zależności od roli. -- -= pozdrawiam tomek =-
Re: RoR insert po utworzeniu + trochę bloga :)
Author: punkracy
Date: Tue, 23 Jan 2007 10:24
Date: Tue, 23 Jan 2007 10:24
26 lines
2483 bytes
2483 bytes
On Jan 22, 10:05 pm, tomek gomek <tomekgo...@moje.ubuntu.com.pl.eu.org> wrote: > Artykuł, owszem, ciekawy, tylko u mnie kontrola będzie chyba (?) > bardziej rozbudowana, więc przykład z 'Recipies' choć niezbyt > szczegółowy jest bardziej odpowiedni. Ról będę miał kilka, jednak > uprawnienia to oddzielna historia. > Podpatrzę na pewno, bo będę potrzebował ukrywania pewnych treści w > zależności od roli. zobacz też: http://lists.rubyonrails.org/pipermail/rails/2006-January/015163.html tego samego autora, bardziej rozbudowane role. przykład z Recipies jest mniej więcej taki sam jak Ci pokazałem wcześniej, z tym, że masz jeszcze ta tabele rights i nie musisz w każdym kontrolerze na stałe wpisywać uprawnienia. pozdrawiam ps. warto też przerobić jakąś książke od początku do końca -- Krzysztof Rączkiewicz http://punkracy.com # Prawie jak Blog 27 http://10110.biz/pmug # Polish Mainframe User Group
Re: RoR insert po utworzeniu
Author: Rafał Komorowski
Date: Wed, 24 Jan 2007 09:38
Date: Wed, 24 Jan 2007 09:38
41 lines
3134 bytes
3134 bytes
On Jan 22, 5:11 pm, tomek gomek <tomekgo...@moje.ubuntu.com.pl.eu.org> wrote: > Czyli taki listing jest bez sensu? :) [ciach] > kontrolery = "select roles.id as id, roles.name as rola from rights_roles > left join rights on rights.id=right_id > left join roles on roles.id=role_id > group by rola > order by rola" Moim zdaniem takie programowanie jest bez sensu, bo ty właściwie piszesz wszystko ręcznie jak w PHP, tyle tylko, że język "pod spodem" zmienił się na Ruby, a całość jest w otoczce frameworka Rails. Oczywiście ja rozumiem skąd to się bierze, też przechodziłem takie chorobowe etapy przy różnych przesiadkach, ale warto jednak od razu zastosować się do konwencji railsowych, bez etapu pośredniego "zrobię to jak w pehapie", gdyż Rails jest bardzo mocno osadzony na konwencjach i bardzo szybko się okaże, że czegoś nie da się zrobić, albo nie zadziała ci cache'owanie, albo trafisz na jakiś ciężki do wykrycia błąd, a wszystko przez to, że nie piszesz jak David każe :) > W planie mam zrobić listę kontrolerów zdefiniowanych w tabeli i po > kliknięciu w link kontrolera ma się pokazać lista zdefiniowanych do > niego akcji. Takie rzeczy robią się właściwie same, a przykład z Rails Recipes może co najwyżej rozjaśnić jak sprawnie oprogramować te lookupy, bo to trochę mniej intuicyjne, choć typowe dla RDBMS. > Niby to działa, może ktoś coś podpowie? Jakieś hasło oprócz > ActiveRecord? ;) Naprawdę, przeczytaj "Agile..." przynajmniej do rozdziału 11 włącznie, zanim zaczniesz zadawać pytania :) Powodzenia. komor
Re: RoR insert po utworzeniu
Author: tomekgomek
Date: Wed, 24 Jan 2007 12:33
Date: Wed, 24 Jan 2007 12:33
47 lines
3362 bytes
3362 bytes
On 24 Sty, 10:38, "Rafał Komorowski" <k...@mac.com> wrote: Moim zdaniem takie programowanie jest bez sensu, bo ty właściwie > piszesz wszystko ręcznie jak w PHP, tyle tylko, że język "pod > spodem" zmienił się na Ruby, a całość jest w otoczce frameworka > Rails. Oczywiście ja rozumiem skąd to się bierze, też > przechodziłem takie chorobowe etapy przy różnych przesiadkach, ale > warto jednak od razu zastosować się do konwencji railsowych, bez > etapu pośredniego "zrobię to jak w pehapie", gdyż Rails jest bardzo > mocno osadzony na konwencjach i bardzo szybko się okaże, że czegoś > nie da się zrobić, albo nie zadziała ci cache'owanie, albo trafisz > na jakiś ciężki do wykrycia błąd, a wszystko przez to, że nie > piszesz jak David każe :) > Naprawdę, przeczytaj "Agile..." przynajmniej do rozdziału 11 > włącznie, zanim zaczniesz zadawać pytania :) > > Powodzenia. > > komor Ok, zbłaźniłem się strasznie :D po dwóch/trzech dniach czytania to widzę. Przeczytałem rozdział o AR i zrobiłem to samo w trzech linijkach, nie wiem czy optymalnie ale przynajmniej w Ruby a nie sql czy php ;) # lista ról @role = Role.find(:all) # lista uprawnień wg roli @rola = Role.find(params[:id]) @akcje_by_rola = @rola.rights Jestem naprawdę pod dużym wrażeniem Railsów, udało mi się nawet dojść samemu do tego, żeby zrezygnować z tabeli roles_users (jak w 'Recipies') bo użytkownik będzie miał tylko jedną rolę :) Cudne toto, że brak mi słów i nie mogę się doczekać nauki i tworzenia kiedy jestem w pracy (teraz ;)) ps. "ręczne inserty" też już odpuściłem ponieważ dowiedziałem się o czyś takim jak "<<", dzięki za odpowiedzi i zapytam dopiero jak naprawdę nie znajdę w książce. pozdrawiam tomek
Re: RoR insert po utworzeniu
Author: punkracy
Date: Wed, 24 Jan 2007 18:38
Date: Wed, 24 Jan 2007 18:38
20 lines
2008 bytes
2008 bytes
On 24 Sty, 13:33, tomekgo...@gmail.com wrote: > @akcje_by_rola = @rola.rights mała uwaga, sugeruje pisanie zmiennych, nazw kontrolerów, a zwłaszcza modeli po angielsku. taka mała sugestia > ps. "ręczne inserty" też już odpuściłem ponieważ dowiedziałem > się o czyś takim jak "<<", dzięki za odpowiedzi i zapytam dopiero > jak naprawdę nie znajdę w książce. w PHP "takie coś" zdaje się także występuje. pozdrawiam -- Krzysztof Rączkiewicz http://punkracy.com # Prawie jak Blog 27 http://10110.biz/pmug # Polish Mainframe User Group
Re: RoR insert po utworzeniu
Author: tomek gomek
Date: Wed, 24 Jan 2007 21:24
Date: Wed, 24 Jan 2007 21:24
24 lines
1832 bytes
1832 bytes
Dnia Wed, 24 Jan 2007 10:38:02 -0800, punkracy napisał(a): > On 24 Sty, 13:33, tomekgo...@gmail.com wrote: >> @akcje_by_rola = @rola.rights > > mała uwaga, > sugeruje pisanie zmiennych, nazw kontrolerów, a zwłaszcza modeli po > angielsku. > taka mała sugestia > będę się starał >> ps. "ręczne inserty" też już odpuściłem ponieważ dowiedziałem >> się o czyś takim jak "<<", dzięki za odpowiedzi i zapytam dopiero >> jak naprawdę nie znajdę w książce. > > w PHP "takie coś" zdaje się także występuje. Owszem, ale do przesuwania bitów (przynajmniej ja wiem tylko o tym, bo tylko do tego stosowałem :)) -- -= pozdrawiam tomek =-
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