View not working with . but works with [' ']

I have some weird view behavior going around which I am unable to
understand.

<% for b in @admin_budget %>

<%= b['rental'] %> <%= b['phone'] %> <%= b['consumables'] %> <% end %>

works… but

<% for b in @admin_budget %>

<%= b.rental %> <%= b.phone %> <%= b.consumables %> <% end %>

does not work.

b.inspect throws up
#“7”, “current_approval_status”=>“N”, “misc”=>“1000”, “place_id”=>nil,
“updated_at”=>“2007-03-11”, “approved_by”=>nil, “created_by”=>“3”,
“total”=>“0”, “updated_by”=>nil, “id”=>“3”, “phone”=>“1500”,
“year”=>“2007”, “salaries”=>“5000”, “rental”=>“2500”,
“approved_at”=>nil, “consumables”=>“1000”,
“created_at”=>“2007-03-11”}>

and b.class throws up
AdminBudget

What is happening here? Any clues?

Regards,
Rajesh

Quick addition…

Just before the b.rental I am using b.month and b.year and
b.user.name. They produce the expected results! Wits end, folks.

Regards,
Rajesh

K. Rajesh wrote:

“updated_at”=>“2007-03-11”, “approved_by”=>nil, “created_by”=>“3”,
Regards,
Rajesh

If you check b.methods what do you see?


Michael W.

Thats a fairly big list… here goes

[“logger”, “table_name_prefix=”, “instance_values”,
“update_attributes”, “save_with_validation”, “toggle!”, “after_save”,
“build_user”, “singleton_methods”, “logger=”,
“clear_aggregation_cache”, “hash”, “send”, “enable_warnings”,
“initialize”, “record_timestamps”, “save!”, “update”,
“attributes_before_type_cast”, “instance_of?”,
“before_validation_on_update”, “nil?”, “record_timestamps=”,
“attribute_names”, “valid?”, “remove_subclasses_of”, “instance_exec”,
“id_before_type_cast”, “before_create”, “allow_concurrency”,
“create_user”, “protected_methods”, “clear_association_cache”,
“silence_stderr”, “tainted?”, “create_with_callbacks”,
“instance_eval”, “table_name_suffix”, “user”, “allow_concurrency=”,
“untaint”, “kind_of?”, “update_attribute”,
“after_validation_on_update”, “equal?”, “save_without_validation!”,
“display”, “table_name_suffix=”, “user=”, “blank?”, “load”, “errors”,
“after_create”, “destroy”, “private_methods”, “b64encode”,
“silence_stream”, “update_without_callbacks”, “readonly!”,
“set_place_target”, “is_a?”, “freeze”, “attribute_present?”,
“before_destroy”, “increment”, “gem”, “create”,
“save_with_validation!”, “eql?”, “require”, “has_user?”,
“before_update”, “subclasses_of”, “returning”, “quoted_id”,
“update_attribute_without_validation_skipping”, “id”, “method”,
“generate_read_methods”, “public_methods”, “lock_optimistically”,
“extended_by”, “`”, “id=”, “attributes”, “update_with_callbacks”,
“generate_read_methods=”, “pluralize_table_names”, “build_place”,
“has_attribute?”, “after_destroy”, “extend”, “attributes=”,
“initialize_with_callbacks”, “lock_optimistically=”, “configurations”,
“pluralize_table_names=”, “user?”, “type”, “after_update”,
“with_options”, “update_attribute_with_validation_skipping”,
“object_id”, “configurations=”, “instance_variables”, “suppress”,
“copy_instance_variables_from”, “increment!”, “frozen?”,
“destroy_without_callbacks”, “destroy_without_transactions”, “dclone”,
“create_place”, “to_a”, “decrement”, “validate_on_create”,
“create_without_timestamps”, “place”, “update_with_lock”, “class”,
“validate”, “before_validation”, “place=”, “schema_format”,
“instance_variable_get”, “destroy_with_callbacks”, “encode64”,
“destroy_with_transactions”, “verification_timeout”, “to_param”,
“colorize_logging”, “schema_format=”, “to_s”, “validate_on_update”,
“respond_to_without_attributes?”, “new_record?”,
“create_or_update_with_callbacks”, “create_with_timestamps”,
“verification_timeout=”, “primary_key_prefix_type”,
“colorize_logging=”, “reload”, “clone”, “after_validation”, “to_json”,
“to_yaml”, “instance_variable_set”, “primary_key_prefix_type=”,
“has_place?”, “==”, “require_library_or_gem”, “===”, “decrement!”,
“save_without_transactions”, “to_yaml_properties”,
“column_for_attribute”, “id”, “to_xml”, “locking_enabled?”,
“to_yaml_style”, “inspect”, “toggle”, “decode_b”, “require_gem”,
“valid_without_callbacks”, “connection”, “update_without_timestamps”,
“readonly?”, “silence_warnings”, “respond_to?”,
“before_validation_on_create”, “create_or_update”, “dup”, “=~”,
“place?”, “before_save”, “decode64”, “save_with_transactions”,
“extend_with_included_modules_from”, “save”,
“save_without_validation”, “send”, “set_user_target”, “taguri”,
“default_timezone”, “daemonize”, “[]”, “transaction”, “methods”,
“[]=”, “update_with_timestamps”, “valid_with_callbacks”, “taguri=”,
“table_name_prefix”, “default_timezone=”, “taint”,
“after_validation_on_create”]

Regards,
Rajesh

Few more questions:

  • What is b.class.superclass? I assume ActiveRecord::Base?
  • Does AdminBudget override rental, phone or consumables with its own
    accessors/methods? If so, you should check into these to make sure
    they’re working correctly.
  • What does b.respond_to?(‘rental’) say? It should return true…

Mmmm… I had an attr_reader specified for each of those things…
when I took it out, things started working again with the . operator.
Why does this happen?

Rajesh

Hi,

Quick addition…

Just before the b.rental I am using b.month and b.year and
b.user.name. They produce the expected results! Wits end, folks.

since rental is not a reserved word either of ruby or AR , I would
suggest that you do a project-wide (including plugins) of “def rental”
or “def self.rental” or even better if your search tool allows regular
expresions “def .* rental.*”. That should show you where you are
overwriting the rental method.

If you are not overwriting it, and assuming your @admin_budget object
holds an array of AR objects, then it makes no sense to me, unless you
have been playing with AR method missing definition.

regards,

javier ramirez

Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!

Because ActiveRecord implements accessors in method_missing. If you
actually define a method or accessor with the same name as a column in
your model, ActiveRecord won’t be able to handle it for you.

Is there a reason you need to specify an attr_reader for those
columns?

No, actually. No reason. I removed it and it works. I was just
wondering why it didnt work. Learning is (from eden li)

“If you actually define a method or accessor with the same name as a
column in
your model, ActiveRecord won’t be able to handle it for you”

Cool,.

Rajesh