Ruby on Rails
Naamgevingsconventies
Zoeken…
Controllers
Namen van controllerklassen zijn meervoudig. De reden is dat de controller meerdere instanties van een objectinstantie bestuurt.
Bijvoorbeeld: OrdersController zou de regelinrichting voor een te orders tabel. Rails zoekt vervolgens naar de klassedefinitie in een bestand met de naam orders_controller.rb in de map /app/controllers .
Bijvoorbeeld : PostsController zou de controller zijn voor een posts tabel.
Als de naam van de controllerklasse meerdere hoofdletters bevat, wordt ervan uitgegaan dat de tabelnaam onderstrepingstekens tussen deze woorden heeft.
Bijvoorbeeld: als een controller de naam PendingOrdersController wordt aangenomen dat de bestandsnaam voor deze controller pending_orders_controller.rb .
modellen
Het model wordt genoemd met behulp van de klassennaamconventie van ongebroken MixedCase en is altijd het enkelvoud van de tabelnaam.
Bijvoorbeeld : als een tabel orders zou orders , zou het bijbehorende model Order worden genoemd
Bijvoorbeeld : als een tabel posts zou posts , zou het bijbehorende model de naam Post
Rails zoekt vervolgens naar de klassedefinitie in een bestand met de naam order.rb in de map /app/models .
Als de modelklasse meerdere hoofdletters bevat, wordt ervan uitgegaan dat de tabelnaam onderstrepingstekens tussen deze woorden heeft.
Bijvoorbeeld: als een model BlogPost wordt aangenomen dat de tabelnaam blog_posts .
Aanzichten en lay-outs
Wanneer een controlleractie wordt weergegeven, probeert Rails een overeenkomende lay-out en weergave te vinden op basis van de naam van de controller.
Weergaven en lay-outs worden in de map app/views .
Op verzoek van de PeopleController#index zal Rails zoeken naar:
- de lay-out met de naam
peopleinapp/views/layouts/(ofapplicationals er geen overeenkomst wordt gevonden) - een weergave met de naam
index.html.erbinapp/views/people/standaard - als u een ander bestand met de naam
index_new.html.erbwilt renderen,index_new.html.erbu daarvoor code schrijven inPeopleController#indexzoalsrender 'index_new' - we kunnen verschillende
layoutsvoor elkeactiondoorrender 'index_new', layout: 'your_layout_name'
Bestandsnamen en automatisch laden
Rails-bestanden - en Ruby-bestanden in het algemeen - moeten een naam krijgen met de bestandsnamen lower_snake_case . Eg
app/controllers/application_controller.rb
is het bestand dat de ApplicationController -klassedefinitie bevat. Merk op dat hoewel PascalCase wordt gebruikt voor klasse- en modulenamen, de bestanden waarin ze zich bevinden nog steeds lower_snake_case moeten zijn.
Consistente naamgeving is belangrijk omdat Rails indien nodig automatisch laden van bestanden gebruikt en "inflection" gebruikt om te transformeren tussen verschillende naamgevingsstijlen, zoals het transformeren van application_controller naar ApplicationController en weer terug.
Als Rails bijvoorbeeld ziet dat de BlogPost klasse niet bestaat (nog niet is geladen), zoekt deze naar een bestand met de naam blog_post.rb en probeert dat bestand te laden.
Het is daarom ook belangrijk om bestanden een naam te geven voor wat ze bevatten, omdat de autoloader verwacht dat de bestandsnamen overeenkomen met de inhoud. Als bijvoorbeeld blog_post.rb plaats daarvan een klasse met de naam Alleen Post , ziet u een LoadError : Expected [some path]/blog_post.rb to define BlogPost .
Als u een map toevoegt onder app/something/ (bijv. / Modellen / producten /), en
- Wil je modules en klassen een naam geven in een nieuwe map, dan hoef je niets te doen en wordt het zelf geladen. In
app/models/products/ you would need to wrap your class inmodule Productsapp/models/products/ you would need to wrap your class in. - wil geen modules en klassen in mijn nieuwe
config.autoload_paths += %W( #{config.root}/app/models/products )naamruimte geven, dan moet jeconfig.autoload_paths += %W( #{config.root}/app/models/products )aan jeapplication.rbaan autoload.
Nog een ding om op te letten (vooral als Engels niet je eerste taal is) is het feit dat Rails verantwoordelijk is voor onregelmatige meervoudsnamen in het Engels. Dus als u een model met de naam "Foot" hebt, moet de bijbehorende controller "FeetController" worden genoemd in plaats van "FootsController" als u wilt dat rails "magic" routing (en nog veel meer van dergelijke functies) werken.
Modellen klasse van controller naam
U kunt op deze manier een modelklasse van een controller-naam krijgen (context is controller-klasse):
class MyModelController < ActionController::Base
# Returns corresponding model class for this controller
# @return [ActiveRecord::Base]
def corresponding_model_class
# ... add some validation
controller_name.classify.constantize
end
end