web-dev-qa-db-fra.com

Ruby on Rails Générer des vues

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.

50
Jason Yost

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.

79
Gazler

la première partie est le nom du modèle/contrôleur, la deuxième partie sont les actions.

2
Martin Lang

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$ 
1
Varus Septimus

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.

0
spqr-praetoria