¿que tiene la palabra display?

Hola.

Quisiera saber si alguien sabe porque no se puede utilizar la palabra
“display” como nombre de un metodo en el controller. He estado haciendo
un ejercicio de un tutorial para aprender en ruby, donde toma valores
nombre y edad de un view y los envia a otro view llamado display y es
ahi cuando explota diciendo que estoy utilizando un “nil object”.

Ahora bien, una solución simplemente es cambiar el nombre display por
otra cosa, suficiente con llamarlos “display1” y corre perfectamente.
Pero la pregunta es: si no es una palabra reservada que hace referencia
a una funcion o alguna clase adicional, ¿porque no se puede utilizar? o
¿que funcion tiene esa palabra como para que no se pueda usar asi? y en
el caso de necesitar hacerlo ¿que se puede hacer para que ruby acepte
esa palabra como nombre de método?

Gracias

2008/5/15 Gustavo G. [email protected]:

Quisiera saber si alguien sabe porque no se puede utilizar la palabra
“display” como nombre de un metodo en el controller.

La idea para situarse uno es que una accion es un metodo de un
controlador.

Pero hay algun detalle mas que se suele obviar en tutoriales: El
metodo ha de ser publico por un lado, y no puede ser un metodo
(heredado) de ApplicationController, ni ser declarado hidden_action
explicitamente.

En todo momento los nombres de los metodos cosiderados “hidden” esta
accesible en el reader hidden_actions. Va un volcado abajo de las que
hay por defecto en el rails donde he generado la lista.

– fxn

==

=~
id
send
`
action_cache_path
action_cache_path=
action_name
action_name=
active_layout
acts_like?
allow_concurrency
allow_concurrency=
allow_forgery_protection
allow_forgery_protection=
append_view_path
asset_host
asset_host=
assigns
assigns=
authenticate_or_request_with_http_basic
authenticate_with_http_basic
b64encode
blank?
breakpoint
cache_page
cache_store
class
clone
component_request?
consider_all_requests_local
consider_all_requests_local=
controller_class_name
controller_name
controller_path
copy_instance_variables_from
daemonize
dclone
debug_routes
debug_routes=
debugger
decode64
decode_b
default_charset
default_charset=
display
dom_class
dom_id
dup
duplicable?
edit_polymorphic_path
edit_polymorphic_url
enable_warnings
encode64
enum_for
eql?
equal?
expire_fragment
expire_page
extend
extend_with_included_modules_from
extended_by
formatted_polymorphic_path
formatted_polymorphic_url
fragment_cache_key
fragment_cache_store
fragment_cache_store=
fragment_for
freeze
frozen?
gem
hash
headers
headers=
id
inspect
instance_eval
instance_exec
instance_of?
instance_values
instance_variable_defined?
instance_variable_get
instance_variable_names
instance_variable_set
instance_variables
is_a?
kind_of?
load
logger
logger=
master_helper_module
master_helper_module=
method
methods
new_polymorphic_path
new_polymorphic_url
nil?
object_id
optimise_named_routes
optimise_named_routes=
page_cache_directory
page_cache_directory=
page_cache_extension
page_cache_extension=
param_parsers
param_parsers=
params
params=
parent_controller
parent_controller=
partial_path
perform_caching
perform_caching=
plural_class_name
polymorphic_path
polymorphic_url
prepend_view_path
private_methods
process
process_cgi
process_with_components
process_with_session_management_support
process_without_filters
process_without_session_management_support
protected_methods
public_methods
read_fragment
remove_subclasses_of
rendered_action_cache
rendered_action_cache=
request
request=
request_forgery_protection_options
request_forgery_protection_options=
request_forgery_protection_token
request_forgery_protection_token=
request_http_basic_authentication
require
require_association
require_dependency
require_library_or_gem
require_or_load
rescue_handlers
rescue_handlers=
rescue_responses
rescue_responses=
rescue_templates
rescue_templates=
resource_action_separator
resource_action_separator=
resources_path_names
resources_path_names=
respond_to
respond_to?
response
response=
returning
send
send!
session
session=
session_enabled?
silence_stderr
silence_stream
silence_warnings
singleton_methods
singular_class_name
subclasses_of
suppress
taguri
taguri=
taint
tainted?
to_a
to_enum
to_json
to_param
to_query
to_s
to_yaml
to_yaml_properties
to_yaml_style
type
unloadable
untaint
url_for
view_paths
view_paths=
with_options
write_fragment

2008/5/15 Gustavo G. [email protected]:

Hola.

Quisiera saber si alguien sabe porque no se puede utilizar la palabra
“display” como nombre de un metodo en el controller. He estado haciendo
un ejercicio de un tutorial para aprender en ruby, donde toma valores
nombre y edad de un view y los envia a otro view llamado display y es
ahi cuando explota diciendo que estoy utilizando un “nil object”.

El valor de las columnas de una fila de una tabla accedida a través de
ActiveRecord, se realiza mediante esta función:

activerecord-2.0.2/lib/active_record/attribute_methods.rb
181 def method_missing(method_id, *args, &block)
182 method_name = method_id.to_s
183
184 # If we haven’t generated any methods yet, generate them, then
185 # see if we’ve created the method we’re looking for.
186 if !self.class.generated_methods?
187 self.class.define_attribute_methods
188 if self.class.generated_methods.include?(method_name)
189 return self.send(method_id, *args, &block)
190 end
191 end
192
193 if self.class.primary_key.to_s == method_name
194 id
195 elsif md = self.class.match_attribute_method?(method_name)
196 attribute_name, method_type = md.pre_match, md.to_s
197 if @attributes.include?(attribute_name)
198 send(“attribute#{method_type}”, attribute_name, *args,
&block)
199 else
200 super
201 end
202 elsif @attributes.include?(method_name)
203 read_attribute(method_name)
204 else
205 super
206 end
207 end

Tiramos del hilo

activerecord-2.0.2/lib/active_record/attribute_methods.rb
59 # generates all the attribute related methods for columns in
the database
60 # accessors, mutators and query methods
61 def define_attribute_methods
62 return if generated_methods?
63 columns_hash.each do |name, column|
64 unless instance_method_already_implemented?(name)
65 if self.serialized_attributes[name]
66 define_read_method_for_serialized_attribute(name)
67 else
68 define_read_method(name.to_sym, name, column)
69 end
70 end
71
72 unless instance_method_already_implemented?(“#{name}=”)
73 define_write_method(name.to_sym)
74 end
75
76 unless instance_method_already_implemented?(“#{name}?”)
77 define_question_method(name)
78 end
79 end
80 end

y por último

activerecord-2.0.2/lib/active_record/attribute_methods.rb
82 # Check to see if the method is defined in the model or any
of its subclasses that also derive from ActiveRecord.
83 # Raise DangerousAttributeError if the method is defined by
ActiveRecord though.
84 def instance_method_already_implemented?(method_name)
85 return true if method_name =~ /^id(=$|?$|$)/
86 @_defined_class_methods ||=
Set.new(ancestors.first(ancestors.index(ActiveRecord::Base)).collect!
{ |m| m.p ublic_instance_methods(false) |
m.private_instance_methods(false) |
m.protected_instance_methods(false) }.flatten)
87 @@_defined_activerecord_methods ||=
Set.new(ActiveRecord::Base.public_instance_methods(false) |
ActiveRecord::Base. private_instance_methods(false) |
ActiveRecord::Base.protected_instance_methods(false))
88 raise DangerousAttributeError, “#{method_name} is defined
by ActiveRecord” if @@_defined_activerecord_methods.inclu
de?(method_name)
89 @_defined_class_methods.include?(method_name)
90 end

Vamos que tira de public_method_instance_methods
protected_instance_methods y private_instance_methods. (definidas en
el core de ruby, en el apartado Module:
class Module - RDoc Documentation )

Con buen criterio (en mi opinión), active record crea atributos de la
clase para todas las columnas cuyos correspondientes métodos no
existan.
display es un método básico de ruby, definido en Object
http://ruby-doc.org/core/classes/Object.html#M000375

Y salvo que me haya equivocado, creo que la cosa va por ahí.

Un Saludo y buenas noches.

On Fri, May 16, 2008 at 1:16 AM, Guillermo [email protected]
wrote:

Un rollo muy largo

Perdón, entendí Modelo en vez de controlador.