Existe-t-il un moyen de générer les vues séparément à l’aide de la commande Rails generate? Je serais également disposé à installer un bijou pour accomplir cette tâche si elle existe. En gros, la commande échafaudage m'en donne trop et je préférerais coder mon contrôleur à la main. Cependant, écrire la vue index avec une table pour les enregistrements ne serait pas très efficace.
Si vous utilisez le générateur de contrôleur, cela générera l'action du contrôleur et la vue.
Rails g controller controllername new create
Cela va créer de nouvelles actions et créer des actions avec leurs vues pertinentes.
Vous devez toujours configurer vos itinéraires manuellement avec cela.
la première partie est le nom du modèle/contrôleur, la deuxième partie sont les actions.
Une situation particulière est lorsque vous souhaitez ajouter une vuenewà un contrôleur existant.
Dans ce cas, utilisez simplement la commande standard, mais veillez à indiquer 'n'
à chaque invite pour ne pas écraser les fichiers existants.
Par exemple, ajouter une vue appelée 'invite'
à un contrôleur existant nommé 'projects'
:
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ Rails -v
Rails 5.1.4
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ Rails generate controller projects invite
Running via Spring preloader in process 46253
conflict app/controllers/projects_controller.rb
Overwrite /home/smith/railsapps/project_manager/app/controllers/projects_controller.rb? (enter "h" for help) [Ynaqdh] n
skip app/controllers/projects_controller.rb
route get 'projects/invite'
invoke erb
exist app/views/projects
create app/views/projects/invite.html.erb
invoke test_unit
conflict test/controllers/projects_controller_test.rb
Overwrite /home/smith/railsapps/project_manager/test/controllers/projects_controller_test.rb? (enter "h" for help) [Ynaqdh] n
skip test/controllers/projects_controller_test.rb
invoke helper
identical app/helpers/projects_helper.rb
invoke test_unit
invoke assets
invoke coffee
identical app/assets/javascripts/projects.coffee
invoke scss
conflict app/assets/stylesheets/projects.scss
Overwrite /home/smith/railsapps/project_manager/app/assets/stylesheets/projects.scss? (enter "h" for help) [Ynaqdh] n
skip app/assets/stylesheets/projects.scss
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$
Comme mentionné précédemment par les mêmes personnes, un post a montré comment générer simplement les vues. Il créera toutes les vues de votre modèle en utilisant les modèles par défaut de Rails, ce qui est très pratique.
Si, comme moi, vous voulez quelque chose d'un peu plus personnalisable, vous pouvez obtenir les résultats suivants.
Vous pouvez créer votre propre générateur afin d'avoir quelque chose comme ça.
Les rails génèrent la vue NAME VIEW [options]
Pour ce faire, vous devez procéder comme suit.
Rails generate generator view
Cela générera quelques fichiers pour vous dans lib/generators/view/folder.
Ouvrez le fichier view_generator.rb et ajoutez le code suivant.
class ViewGenerator < Rails::Generators::Base
source_root File.expand_path('templates', __dir__)
argument :name, type: :string
argument :action, type: :string
def generate_view
template "#{file_name}.html.erb", "app/views/#{folder_name}/#{file_name}.html.erb"
end
private
def folder_name
name.underscore
end
def file_name
action.underscore
end
def type
name.titleize.singularize
end
def down_type
name.downcase.singularize
end
def render_form
"<%= render 'form', #{down_type}: @#{down_type} %>"
end
def render_link_back
"<%= link_to 'Back', #{folder_name}_path %>"
end
end</pre>
Ensuite, vous devez créer le fichier que nous utilisons comme modèle utilisé dans la méthode generate_view.
En utilisant l’action new en tant qu’exemple, créez un fichier filelib/generators/view/new.html.erb et ajoutez ce qui suit.
<h1>New <%= type %></h1>
<%= render_form %>
<%= render_link_back %>
Personnalisez la vue modèle autant que vous le souhaitez. Vous devrez également ajouter le fichier _form.html.erb. Ajoutez toutes les variables et la logique supplémentaires dans votre fichier view_generator.rb et vous avez terminé.
C'est plus de travail, mais cela peut en valoir la peine si vous vous retrouvez tout le temps à générer des vues similaires.
Le meilleur cas d'utilisation que je puisse penser pour cette approche est si vous marquez votre plate-forme en blanc et devez générer plusieurs fichiers pour un profil de client.