🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#399
Author: tomek gomek
Date: Sun, 21 Jan 2007 11:43
21 lines
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
#400
Author: Rafał Komorowski
Date: Mon, 22 Jan 2007 10:04
29 lines
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
#407
Author: Jaroslaw Zabiello
Date: Mon, 22 Jan 2007 12:40
24 lines
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
#401
Author: tomek gomek
Date: Mon, 22 Jan 2007 16:11
85 lines
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 :)
#408
Author: tomek gomek
Date: Mon, 22 Jan 2007 18:35
33 lines
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 :)
#409
Author: tomek gomek
Date: Mon, 22 Jan 2007 18:37
9 lines
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 :)
#410
Author: punkracy
Date: Mon, 22 Jan 2007 19:58
43 lines
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
#402
Author: tomek gomek
Date: Mon, 22 Jan 2007 20:01
12 lines
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 :)
#411
Author: tomek gomek
Date: Mon, 22 Jan 2007 21:05
26 lines
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 :)
#413
Author: punkracy
Date: Tue, 23 Jan 2007 10:24
26 lines
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
#403
Author: Rafał Komorowski
Date: Wed, 24 Jan 2007 09:38
41 lines
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
#404
Author: tomekgomek
Date: Wed, 24 Jan 2007 12:33
47 lines
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
#405
Author: punkracy
Date: Wed, 24 Jan 2007 18:38
20 lines
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
#406
Author: tomek gomek
Date: Wed, 24 Jan 2007 21:24
24 lines
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