2010-09-24 12 views

risposta

21

rails generate model Portfolio

rails generate controller Admin::Portfolios

+1

In che modo la vista scaffold verrebbe generata in questo caso? –

+0

quando si genera il controller, crea anche le viste. se si passano le azioni, ad esempio (indice, mostra, ecc.) al comando generate controller, verranno create tali viste specifiche e verranno eliminate le azioni del controller. –

+0

Hai ragione Jed. Ma genera solo viste vuote. –

5

Aggiornato secondo @ tybro0103

Utilizzare nifty: Generatori: https://github.com/ryanb/nifty-generators

rails generate nifty:scaffold Admin::Portfolio 

Se è già stato generato il modello o il patibolo senza namespace e vorreste per rifarlo per il namespace admin, puoi saltare il modello:

rails generate nifty:scaffold Admin::Portfolio --skip-model 

Se si desidera che il patibolo per generare opinioni con tutti i campi, si prega di mettere ancora una volta i nomi dei campi, ad esempio:

rails generate nifty:scaffold portfolio name:string 
rails generate nifty:scaffold Admin::portfolio name:string --skip-model 

faccio di solito i due insieme quindi è facile andare solo alla precedente comando e modificalo per aggiungere Admin :: & --skip-model.

+0

questo è come la pagina di amministrazione che fa powerhouse – lulalala

7

@RubyDev aveva ragione a suggerire Ryan Bate Nifty Generators, ma non so perché ha detto di utilizzare l'opzione --skip-model.

Nifty Generators in realtà fanno esattamente quello che stai chiedendo. Basta aggiungere al vostro Gemfile:

gem "nifty-generators" 

ed eseguire:

rails g nifty:scaffold Admin::Portfolio name:string 

questo creerà tutto un ponteggio normale farebbe con i controllori e punti di vista in uno spazio dei nomi 'admin', ma il modello non nello spazio dei nomi.

+0

la mia risposta presuppone che il modello esiste. Ma tu hai ragione OP non l'ho detto! – RubyDev

1

Nifty generatori era la cosa giusta qualche tempo fa, ma ora come Rails 4 rilasciato è diventato obsoleto. Se si desidera generare uno scaffold di amministrazione con un modello non con spazio dei nomi, è possibile utilizzare la gemma rails-admin-scaffold.

+0

Dovrebbe essere aggiornato anche ... –

1

Si può ragionevolmente sufficiente creare i propri generatori e fare quello che vuoi con loro:

In Rails 4:

#config/application.rb 
config.generators do |g| 
    g.scaffold_controller :my_controller 
end 

e

#lib/generators/rails/my_controller/my_controller_generator.rb 
class Rails::MyControllerGenerator < Rails::Generators::ScaffoldControllerGenerator 
    def class_name 
    ([file_name]).map!{ |m| m.camelize }.join('::') 
    end 

    def table_name 
    @table_name ||= begin 
     base = pluralize_table_names? ? plural_name : singular_name 
     ([base]).join('_') 
    end 
    end 
end 

rimuoverà il modello namespacing.

Tenete a mente se si sta generando uno scaffold_controller da solo avrete bisogno di chiamare in modo esplicito il generatore personalizzato: rails g my_controller 'account/users'

Purtroppo questo gestisce solo il controller. Sto ancora cercando una soluzione di visualizzazione.

31

Rails 4 generatori sono un po 'diversi. Se si utilizza il generatore scaffold_controller, verrà pre-compilato tutti i file di visualizzazione, ma per impostazione predefinita verrà cercato un modello denominato Admin :: Portfolio. Per caricare il modello corretto basta passare il nome del modello come argomento al generatore.

$ rails g model Portfolio 
     invoke active_record 
     create db/migrate/20150822164921_create_portfolios.rb 
     create app/models/portfolio.rb 
     invoke test_unit 
     create  test/models/portfolio_test.rb 
     create  test/fixtures/portfolios.yml 

$ rails g scaffold_controller Admin::Portfolio --model-name=Portfolio 
     create app/controllers/admin/portfolios_controller.rb 
     invoke haml 
     create app/views/admin/portfolios 
     create app/views/admin/portfolios/index.html.haml 
     create app/views/admin/portfolios/edit.html.haml 
     create app/views/admin/portfolios/show.html.haml 
     create app/views/admin/portfolios/new.html.haml 
     create app/views/admin/portfolios/_form.html.haml 
     invoke test_unit 
     create test/controllers/admin/portfolios_controller_test.rb 
     invoke helper 
     create app/helpers/admin/portfolios_helper.rb 
     invoke test_unit 
     invoke jbuilder 
     create app/views/admin/portfolios 
     create app/views/admin/portfolios/index.json.jbuilder 
     create app/views/admin/portfolios/show.json.jbuilder 

Ciò fornirà un controller con spazio dei nomi e viste che fanno riferimento al modello non assegnato ai nomi.

+0

Grazie mysmallidea, come sei venuto a conoscenza dell'opzione --model-name? È qualcosa che devi guardare per il codice sorgente, o ci sono documenti da qualche parte? –

+1

Se si digita 'rails g scaffold_controller' mostrerà tutte le opzioni per quel generatore. – mysmallidea

+0

'rails g scaffold admin/portfolio' applica uno spazio dei nomi a livello di directory' admin/', uno spazio dei nomi Ruby di' Admin :: Portfolio' e una tabella denominata 'admin_portfolio', mentre il comando precedente (' rails g scaffold Admin: : Portfolio --model-name = Portfolio') genera le stesse directory e file, ma il contenuto è diverso in quanto i modelli non hanno il prefisso 'admin_', anche se il modello è ancora assegnato a namespace come' Admin :: Portfolio'. – aks

0

La soluzione migliore

rails generate scaffold admin/theme name:string active:integer position:integer --migration=false 

rails generate migration CreateTheme name:string active:integer position:integer 
# add t.timestamps in migration 

Quindi non genera un prefisso nelle tabelle

0

È possibile farlo ora on Rails (o almeno su 5.1) utilizzando il seguente comando:

rails g scaffold_controller admin/portfolio --model-name=Portfolio 

Specificando --model-name Rails non tenta automaticamente di indovinare il nome del modello.

+0

Ma con questa opzione le viste generate saranno utilizzare gli helper URL errati. usando l'helper di modello di modello invece degli helper di admin_model (es .: 'portfolios_path' invece di' admin_portifolios_path') –

+1

@JonasPorto Sì, hai ragione, cambio manualmente i file di visualizzazione. –

Problemi correlati