15
Aug
Si je fais :
ruby script/generate controller Post index
J’ai un Controller PostController.
Mais si je fais :
ruby script/generate scaffold Post title:string content:text
J’ai un Controller PostsController.
Pour Rails, un Model c’est au singulier, les tables c’est au pluriel. Les Controllers, ben ça dépend. Si Rails est capable avec un scaffold de mettre au pluriel un truc qu’on met au singulier, pourquoi ne pas le faire lorsque je génère un Controller, si c’est ça la convention ? Peut-être que ça ne change rien ?
Tiens j’ai lu ça :
Rails doesn’t tie controllers to models (i.e. it doesn’t look up the singular of the controller to find the model), you do this by using the model in the controller.
Et j’ai lu ça :
<tpope> wincent: plural is conventional but not required like singular models are
<motion> wincent; name the controller BillyBob if you want
<tpope> wincent: and yeah, it doesn't have to match up with a model
<tpope> wincent: actually script/generate scaffold generates a singular model name. it then pluralizes
that model name if no controller name is specified
Donc ça dépend que de moi. C’est quand j’utilise “Post.new” dans mon Controller que je fais appel à mon Model. Mais c’est le seul lien entre eux a priori.
14
Aug
Je suis reparti avec 1 seul Controller : Artists.
Controller Artists
def new
@artist = Artist.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @artist }
end
end
# artist /artists
# artist /artists.xml
def create
@artist = Artist.new(params[:post])
respond_to do |format|
if @artist.save
flash[:notice] = 'Artist was successfully created.'
format.html { redirect_to(@artist) }
else
format.html { render :action => "new" }
end
end
end
View Artist new
<h1>Artists #new</h1>
<% form_for :artist, :url => { :action => "create" } do |f| %>
<p>Name <%= f.text_field :name %></p>
<p>Name Tag <%= f.text_field :name_tag %></p>
<p><%= submit_tag 'Create' %></p>
<% end %>
Le formulaire, s’affiche. Mais dès que je veux le valider j’ai comme erreur :
undefined method `artist_url'
Je dis bien à mon formulaire d’utiliser la méthode create non ?
Je me suis dit que c’était un problème de singulier/pluriel, je sais pas. Mais j’ai testé avec un Controller au singulier, et j’ai la même erreur. Une idée ?
13
Aug
Quand on génère un Controller, ça crée plusieurs fichiers dans plusieurs dossiers, notamment les fichiers de test et les Views correspondants aux méthodes. Si on veut supprimer un Controller à la main, faut pas oublier un fichier. Rien de plus simple avec :
ruby script/destroy controller MonController
Ca supprime des fichiers et des dossiers (si ces derniers sont vides) :
rm test/unit/helpers/review_helper_test.rb
rm app/helpers/review_helper.rb
rm test/functional/review_controller_test.rb
rm app/controllers/review_controller.rb
rmdir test/unit/helpers
notempty test/unit
notempty test
rmdir test/functional
notempty test
notempty app/views/review
notempty app/views
notempty app
notempty app/helpers
notempty app
notempty app/controllers
notempty app
J’avais 4 Controllers mais ils étaient au singulier donc j’ai préféré les recréer au pluriel. J’ai viré les 4 puis refait les 4.
Vous noterez qu’il vire les dossiers “helpers” et “functional” qu’à la fin (vu que j’ai déjà viré les 3 autres Controllers).
12
Aug
… que de voir le code source d’autres applis Rails.
En parcourant le tag “ruby-on-rails” sur Stack Overflow, je suis tombé sur ce topic : What’s a good rails example application. J’ai par la suite téléchargé Mephisto et Tracks, juste pour voir. Les deux nécessitaient RoR 2.2.2 :
gem install -v=2.2.2 rails
Et ben malheureusement, j’arrive pas à les lancer. Je regarderai surtout le code source de toute façon.
11
Aug
Je viens de créer mes 4 Controllers : Artist, Album, Article, Review. En voulant écrire mes méthodes, je suis allé voir dans les Controllers “scaffoldés” du blog. J’ai remarqué que les Controllers s’appelaient “Posts” et “Comments”. Puis en allant sur le site RoR Guide, j’ai remarqué que les exemples étaient au pluriel aussi. Alors maintenant je me pose la question : est-ce que c’est obligatoire ? Qu’est-ce que ça change ? Et si je veux passer de singulier à pluriel, je dois juste changer les noms des Controllers et des fichiers/dossiers ?