Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Ruby on Rails] Namespace probleempje

Pagina: 1
Acties:

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Hoi,

Ik ben bezig met een module based applicatie, de eerste module waar ik mee bezig ben is een webshop.
De opbouw is als volgt:
/ front end site
/admin/ backend site

Nu heb ik een aantal models voor de webshop gemaakt met de namespace Webshop
Webshop::Category
Webshop::Product
etc.

Als ik nu in de catalog controller in de backend (Admin::Webshop::CatalogController) één van deze models aanroep krijg ik de volgende foutmelding:
code:
1
uninitialized constant Admin::Webshop::CatalogController::Webshop


Ik heb de model op meerdere manieren proberen aan te roepen namelijk:
Category.find.. en Webshop::Category.find wat beide niet wil werken.

Het vreemde is als ik een extra namespace toevoeg aan de model Admin::Webshop::Category dan werkt het wel.
Verder heb ik mijn Ruby boek geraadpleegt en een aantal articles via google gelezen hier staat ook niet echt een oplossing voor mijn probleem in.

www.dannyhiemstra.nl


  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Door nog wat verder te proberen ben ik erachter gekomen dat het wel werkt als ik vanuit de controller de model aanroep via:
::Webshop::Category

Is dit de juist oplossing voor mijn probleem of niet echt netjes?

www.dannyhiemstra.nl


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
Namespaces in Ruby? Je bedoelt waarschijnlijk modules? Modules zijn niet echt te vergelijken met namespaces, al kun je ze wel als namespace-achtig iets gebruiken :)

Rails is niet echt voorbereid op hetgeen dat jij wilt doen met models. Models in een module kunnen daardoor inderdaad vreemde dingen opleveren. Het lijkt mij ook niet wenselijk om dit zo aan te pakken? Wat is het voordeel van het 'namespacen' van je models? Voor controllers is dit geen probleem, maar voor je models is het niet handig.

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Bedankt voor je reactie.

De reden waarom ik dit wil is omdat ik in een project bv. meerdere "modules" wil zoals een webshop, CMS of een fotoalbum.
Nu komt de model Category zowel in de webshop als in het CMS voor.

Is het dan beter om deze models bv CMS_Category en WS_Category te noemen ipv CMS::Category en Webshop::Category?
Is hier een bepaalde regel / standaard voor?

www.dannyhiemstra.nl


Verwijderd

Ik snap niet helemaal wat je wil, maar je kan prima werken met namespaces in Rails.

script/generate controller admin/my_controller levert een namespaced controller op

controller staat dan in
app/controllers/admin/my_controller.rb

link_to en url_for gaan binnen de controllers prima. Als je naar de admin namespace wilt linken gebruik je url_for(:controller => "admin/my_controller"), als je vanuit je namespace controller wilt linken gebruik je url_for(:controller => "/my_other_controller").

Bedoel je dit?
Eerst lezen

Je bedoelt dat niet, maar je wilt namespaces in een namespace gebruiken. Ik weet niet of je dat wilt doen, is wel een beetje de problemen opzoeken heb ik het idee.

Ik heb gewoon /admin/news_category, /admin/news_posts, /admin/news_comments b.v.

[ Voor 20% gewijzigd door Verwijderd op 05-05-2008 09:32 ]


  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
En de models noem je dan bv. NewsCategory?

Het leek mij in de eerste instantie veel netter werken om mijn modules zoals webshop, cms etc in te delen in namespaces en mappen waar ze automatisch in terecht komen.
Dit scheid de modules zoals webshop, cms, fotoalbum etc veel beter.
Maar aangezien iedereen het niet netjes en afraad om mijn models via namespaces te laten gaan heb ik mijn bedenkingen.

www.dannyhiemstra.nl


Verwijderd

Klopt models zijn dan NewsPost en NewsCategory. Het lijkt omslachtig en veel werk elke keer weer die models en controllers aan te maken. Maar als je met RESTful routes werkt, dan is het echt alleen initieel werk. Ik zal je een voorbeeld geven van een Routes.rb.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
map.namespace :admin do |admin|
    admin.resources :news_categories, :has_many => :news
    admin.resources :news_posts, 
      :member => {
        :toggle_home_page => :post, 
        :toggle_published => :post, 
        :toggle_important => :post
      },
      :has_many => :comments
    admin.resources :comments    
    admin.resources :agenda_items,
      :member => {
        :toggle_home_page => :post, 
        :toggle_published => :post, 
        :toggle_important => :post
      }
    admin.resources :agenda_categories, :has_many => :agenda_items
    admin.resources :people, :has_many => :teams
    admin.resources :teams, :has_many => :persons
  end


Al je models zijn uniek waardoor je overal ze kan aanroepen met b.v. NewsComment. Terwijl je controllers op dezelfde manier werken, dus consistent. link naar actions met deze routes zijn:

link_to(admin_news_post_path) en link_to(admin_news_category_path)

[ Voor 11% gewijzigd door Verwijderd op 05-05-2008 10:13 ]


  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Bedankt voor je voorbeeld, ik heb gisteren ook best veel gelezen over RESTful.
De grootste vraag waar ik mee zat is hoe map je request method zoals delete naar de delete action, gaat dit vanzelf?

En in jou voorbeeld, waarom zet je de relaties als has_many in je resources?
Weet je toevallig een artikel die wat meer hierover in gaat?

Alvast heel erg bedankt.

www.dannyhiemstra.nl


Verwijderd

Het mooie van REST is dat je URL hetzelfde is voor bijvoorbeeld wijzig/bekijken of delete. Alleen je method is anders.

b.v. NewsPost wissen gaat zo:

link_to("Wis nieuwsbericht", admin_news_post_path(params[:id]), :method => "delete", :confirm => "Weet je het zeker?")

die gaat naar je controller naar

def destroy
end

Verwijderd

chuxiej schreef op maandag 05 mei 2008 @ 10:13:
En in jou voorbeeld, waarom zet je de relaties als has_many in je resources?
Weet je toevallig een artikel die wat meer hierover in gaat?
Dan kan je b.v. een URL maken met daarin :news_category_id erbij.

Stel je wil een lijst met nieuwsberichten van categorie 1 dan kan dat met 1 url.
/admin/news_categories/1/news

Haal nieuwsbericht 12 op met categorie 1 wordt
/admin/news_categories/1/news/12

anders zou het worden:
/admin/news/12?news_category_id=1

Ik heb alle info gehaald uit de API (api.rubyonrails.nl) en dan bij map.resources

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
Heel erg bedankt, ik ga me hier verder in verdiepen via de api docs.
Nog 1 klein vraagje; mapt ror de http method 'delete' of bv 'put' automatisch naar de controller method delete en update of moet je hier ook een map resource voor aanmaken?

www.dannyhiemstra.nl


Verwijderd

Dat doet hij automatisch volgens mij. Handige is 'rake routes' te gebruiken. Zie je alle mogelijke routes van je routes.rb
Pagina: 1