references rails guide generate example commands ruby-on-rails

ruby-on-rails - guide - rails scaffold references



El generador de Rails scaffold_controller no aplica los atributos del modelo a las vistas (2)

Esto es lo que se supone que debe hacer. Cuando llama a scaffold_controller le está diciendo al generador que no use un modelo. Si desea tener atributos de formulario en las vistas, debe pasarlos al generador como lo haría con un andamio normal.

rails g scaffold_controller User name email

Estoy usando el generador scaffold_controller en un modelo existente con atributos existentes, pero los formularios de vista que se generan no tienen ningún control de entrada para los atributos del modelo correspondiente, solo son formularios vacíos. ¿Porqué es eso?

p.ej:

rails generate scaffold_controller User --skip --no-test-framework

Donde el usuario ya tiene name y email atributos de email deben generar formularios con los campos de nombre y correo electrónico ...


Estoy de acuerdo en que apesta tener que teclear todos los atributos usted mismo, con el peligro de escribir mal el nombre o el tipo, cuando la información solo está allí en el modelo. Aquí hay un parche de mono que escribí para interpolar los nombres y tipos de columna (al menos en Rails 4). Coloque este código en un archivo .rb en el directorio # {Rails.root} / config / initializers:

# patch to scaffold_controller to read model attributes # if none specified on command line (and model exists) # usage: rails g scaffold_controller <MODEL> if ARGV.size > 0 and ARGV[0] == "scaffold_controller" puts "/n/n/n/n" puts "monkey patch attributes at #{Time.now}" Rails::Generators::NamedBase.class_eval do # parse_attributes! converts name:type list into GeneratedAttribute array # must be protected; thor enumerates all public methods as commands # and as I found out will call this and crash otherwise protected def parse_attributes! #:nodoc: # get model columns into col:type format self.attributes = get_model_attributes if not self.attributes or self.attributes.empty? # copied from default in named_base.rb self.attributes = (self.attributes || []).map do |attr| Rails::Generators::GeneratedAttribute.parse(attr) end end # get model columns if no attributes specified on command line # fake it by creating name:type args private def get_model_attributes # fill from model begin mdl = class_name.to_s.constantize # don''t edit id, foreign keys (*_id), timestamps (*_at) attrs = mdl.columns.reject do |a| n = a.name n == "id" or n.end_with? "_id" or n.end_with? "_at" end .map do |a| # name:type just like command line a.name+":"+a.cast_type.type.to_s end puts "model_attributes(#{class_name})=#{attrs}" return attrs rescue => ex puts ex puts "problem with model #{class_name}" return nil end end end end