[RoR] Nested routing en belongs_to

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dipsausje
  • Registratie: Februari 2006
  • Niet online
Ik had de vraag ook al via stackoverflow gesteld maar gezien het nogal dringend is (deadline..) wilde ik de vraag ook nog even hier stellen voor de (hopelijk) aanwezige RoR experts:

Ik ben net begonnen met iets in Ruby on Rails en probeer het zo te maken dat ik een object ('reflection') heb, deze heeft een aantal attributen (naam, content, etc), maar moet ook afbeeldingen ('img') aan zich gelinkt krijgen (one to many). Ik heb juist gekozen voor Rails vanwege de manieren waarop het dit soort links en de validaties juist uit handen kan nemen.

Nu heb ik eerst het volgende geprobeerd, en vervolgend dit. Het probleem zoals beschreven in de 2e link (no route) is opgelost door de antwoorden daar op te volgen, echter loop ik daar daarna tegen exact hetzelfde probleem aan als wat er fout gaat bij het voorbeeld uit de guides:


code:
1
2
undefined method `imgs' for #<Reflection:0x007fd1b9740c10>
app/controllers/imgs_controller.rb:28:in `new'

Ruby:
1
2
3
4
5
6
7
8
9
def new
   @reflection = Reflection.find(params[:reflection_id])
   @img = @reflection.imgs.build    #dit is de regel waar het fout gaat

    respond_to do |format|
        format.html # new.html.erb
        format.json { render json: @img }
   end
end


Of bij het voorbeeld van de guide:
Ruby:
1
2
3
<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>  #.comments. gaat dan fout
  <div class="field">



Ik heb het idee dat er ergens iets zo stoms is wat ik fout doe en telkens overheen lees, als ik de tutorial al niet aan de praat krijg...

[ Voor 4% gewijzigd door Dipsausje op 11-01-2012 14:47 ]


Acties:
  • 0 Henk 'm!

  • Tp21
  • Registratie: December 2003
  • Laatst online: 28-08 15:22
Heb je wel in je Reflection klasse een has_many ? die heb je wel nodig om activerecord de automagische methoden te laten genereren.

in dit geval zou het "has_many :imgs" moeten zijn gok ik.

Acties:
  • 0 Henk 'm!

  • Dipsausje
  • Registratie: Februari 2006
  • Niet online
Kijk dat soort domme fouten waar je overheenleest bedoel ik dus... Ik had "has_many :img" staan in reflection.rb, kijkende naar de guide kan het inderdaad wel eens de plurar zijn die ik moet hebben. Ik heb nu ook eens "has_many :imgs" geprobeerd, maar dat geeft de volgende error:

code:
1
2
3
4
5
6
7
8
9
10
undefined method `model_name' for NilClass:Class

1: <%= form_for([@reflection, @imgs]) do |f| %>
2:   <% if @img.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@img.errors.count, "error") %> prohibited this img from being saved:</h2>

app/views/imgs/_form.html.erb:1:in `_app_views_imgs__form_html_erb__3738543455560793782_70269366172300'
app/views/imgs/new.html.erb:3:in `_app_views_imgs_new_html_erb__321107526444415431_70269366201680'
app/controllers/imgs_controller.rb:30:in `new'



EDIT: en ergens anders had ik weer een plural te veel staan. Ik moet duidelijk nog wennen aan het gebruik van wel/geen plural in Rails... Je bent een held! :*)

[ Voor 9% gewijzigd door Dipsausje op 11-01-2012 15:13 ]


Acties:
  • 0 Henk 'm!

  • Tp21
  • Registratie: December 2003
  • Laatst online: 28-08 15:22
Als ik de error lees kan blijkbaar geen Img klasse vinden, als ik jou was zou ik iets meer code posten, anders blijft het zo gokken.

[ Voor 5% gewijzigd door Tp21 op 11-01-2012 15:14 ]


Acties:
  • 0 Henk 'm!

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Is er een hele specifieke reden dat je dat model per se 'imgs' wilt noemen?

Beter neem je gewoon de RoR conventie over en noem je dat model 'Image', waarna je in je Reflection model gewoon has_many :images kan gebruiken.

Acties:
  • 0 Henk 'm!

  • Tp21
  • Registratie: December 2003
  • Laatst online: 28-08 15:22
Keeper schreef op woensdag 11 januari 2012 @ 15:14:
Is er een hele specifieke reden dat je dat model per se 'imgs' wilt noemen?

Beter neem je gewoon de RoR conventie over en noem je dat model 'Image', waarna je in je Reflection model gewoon has_many :images kan gebruiken.
Je kan altijd nog met ':class' een specifieke klasse specificeren zoals:

Ruby:
1
has_many :imgs, class: Img

Acties:
  • 0 Henk 'm!

  • Dipsausje
  • Registratie: Februari 2006
  • Niet online
Keeper schreef op woensdag 11 januari 2012 @ 15:14:
Is er een hele specifieke reden dat je dat model per se 'imgs' wilt noemen?

Beter neem je gewoon de RoR conventie over en noem je dat model 'Image', waarna je in je Reflection model gewoon has_many :images kan gebruiken.
Het model heet 'Img', oftewel volgens RoR conventies 'Image' alleen dan korter. De reden dat ik het inkort? Geen idee, gewoonte gok ik...

Probleem was dus uiteindelijk dat ik op een paar plaatsen 'Img' en 'Imgs' verwisseld had, en daar las ik constant overheen. Na dat opgelost te hebben werkt het maken en editen prima, nu alleen de gemaakte index pagina nog aan de praat krijgen...

Acties:
  • 0 Henk 'm!

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Dipsausje schreef op woensdag 11 januari 2012 @ 15:26:
Het model heet 'Img', oftewel volgens RoR conventies 'Image' alleen dan korter. De reden dat ik het inkort? Geen idee, gewoonte gok ik...
Ok, ik kon me voorstellen dat dan alleen de ingebouwde pluralizer het niet goed begrijpt, omdat `Img` een niet bestaand woord is, maar kennelijk was die slim genoeg ;-).

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
maar gezien het nogal dringend is (deadline..)
[/quote]Ik ben net begonnen met iets in Ruby on Rails [/quote]

Daar zit je voornaamste probleem, :+. Indien je een deadline hebt, geen nieuwe technologie gebruiken. En als je het doet, neem dan de tijd om het goed te doen - neem ook de code standaarden en dergelijke om, zodat je dit soort problemen voorkomt. Je hebt nu enige tijd (uren) besteed aan het proberen op te lossen van een probleem die je niet zou hebben als je er de tijd voor had / genomen had, of als je met bekende technologie werkte.

Niks persoonlijks, gewoon 2 centen. M'n collega's zijn ook met een project met een deadline begonnen en proberen ook allerlei nieuwe technologie op te pakken met wisselend succes.

Acties:
  • 0 Henk 'm!

  • Dipsausje
  • Registratie: Februari 2006
  • Niet online
Haha, heb je eigenlijk helemaal gelijk in, zeker gezien ik maandag begonnen ben en de deadline (incl content) woensdag is...

Gelukkig heb ik nog een back-up als het echt nodig is, en is het voor mijn studie*, niet voor een klant. Ik wilde dan ook vooral nu kijken of ik Rails überhaupt wat vond om in de toekomst te gebruiken, conclusie: ik denk dat mijn php gebruik flink zal afnemen. Ik moet, voor ik het verder toepas, inderdaad er verder induiken om alles ook echt goed te doen. Maar het neemt een hoop van het saaie, repetitieve, werk uit handen.


*Moet 1x per half jaar een 'showcase' maken waarin bewezen wordt wat ik heb gedaan en geleerd, hier gebruikte ik tot nu toe (zoals de meesten bij ons) Flash voor, maar ik vond het wel weer eens tijd voor een compleet nieuwe ipv alleen nieuwe content.
Pagina: 1