Undefined local variable or method

I am very new to ruby, and trying to get auto complete / predictive text
working, but I am getting the error "undefined local variable or method
`providers’ "

Here is the first box in my view

<label for="">Provider:</label>
<div>
<%= text_field_with_auto_complete :orders, :provider,
  { :tabindex => 1,:size => 30, :maxlength => 100 },
  { :url => { :controller => :orders,
  :action => :auto_complete_for_provider_name},
  :indicator => 'ajax-prov-load-ind',
  :after_update_element =>
"function(element,value){$('activation_customer').enable();$('activation_customer').focus();}"
}  -%>
  <span style="display:none;" id="ajax-prov-load-ind"><%= image_tag
'ajax-load-ind.gif', :style => 'vertical-align:middle;' %></span> <a
href="#TB_inline?height=350&width=400&inlineId=add_provider&modal=true"
class="thickbox">Add Provider</a>
        </div>[/code]



And here is the auto_complete_for_provider_name.rhtml, with the bold
line where it throws the error.

<ul>
[b]<% providers.each do |key, value| -%>[/b]
  <li id="<%=h value -%>"><%=h key -%></li>
<% end -%>
</ul>


here is a snippit from orders controller,


  def auto_complete_for_provider_name
      @provider = params[:orders][:provider].downcase
      @providers = Provider.call_provider_list_service(@provider)
      render :partial => 'auto_complete_for_provider_name', :locals =>
{:providers => @providers}
  end

end

I am just lost. Can anyone tell me why I would get a undefined method

undefined method `provider’ for #Order:0x48ff74c

Extracted source (around line #16):

13:
14: Provider:
15:


16: <%= text_field_with_auto_complete :order, :provider,
17: { :tabindex => 1,:size => 30, :maxlength => 100
},
18: { :url => { :controller => :orders,
19: :action =>
:auto_complete_for_provider_name},

Here is the declaration of my orders controller

def auto_complete_for_provider_name
@provider = params[:order][:provider].downcase
@providers = Provider.call_provider_list_service(@provider)
render :partial => ‘auto_complete_for_provider_name’, :locals =>
{:providers => @providers}
end

If you are wanting something with the same functionality that is not
designed around a specific object, you can use text_field_tag along with
auto_complete_field.

How is your Order class setup? Does it have a provider method? In other
words, does this return true in script/console:

Order.new.respond_to? provider

William P. wrote:

How is your Order class setup? Does it have a provider method? In other
words, does this return true in script/console:

Order.new.respond_to? provider

I am not sure how to run that command. I tried it from dos prompt in
project dir home doing this and didn’t seem to execute anything

script:console Order.new.respond_to? provider

I have changed the view to this:

<%= text_field_with_auto_complete :orders, :provider, {
:tabindex => 1,:size => 30, :maxlength => 100 },
{ :url => { :controller => :orders,
:action => :auto_complete_for_provider_name},

and the orders_controller.rb has this:

def auto_complete_for_order_provider
@provider = params[:order][:provider].downcase
@providers = Provider.call_provider_list_service(@provider)
render :partial => ‘auto_complete_for_provider_name’, :locals =>
{:providers => @providers}
end

and auto_complete_for_provider_name.rhtml has this:

    <% providers.each do |key, value| -%> <<<<<<<<<<< NEW ERROR HERE
  • <%=h key -%>
  • <% end -%>

bringing me back to the error undefined local variable or method
`providers’

Isn’t providers declared right there in the orders_controller.rb though?

Ok, here is the basic deal. The code you are using requires your Order
object to have a provider method. This would be either a column in the
table, an association, or possible a custom method. Based on the method
you are using for autocomplete, you don’t want to use
text_field_with_auto_complete, you need to use a combination of
text_field_tag and auto_complete_field. You can read more about them
here:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#M000610
http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptMacrosHelper.html#M000576

William P. wrote:

If you are wanting something with the same functionality that is not
designed around a specific object, you can use text_field_tag along with
auto_complete_field.

This is working code in another page that I inherited to try and learn
Ruby. I just started with a new object, harvesting the important code
changing the method names and appropriate variables.

William P. wrote:

Ok, here is the basic deal. The code you are using requires your Order
object to have a provider method. This would be either a column in the
table, an association, or possible a custom method. Based on the method
you are using for autocomplete, you don’t want to use
text_field_with_auto_complete, you need to use a combination of
text_field_tag and auto_complete_field. You can read more about them
here:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#M000610
http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptMacrosHelper.html#M000576

Wonderful! Thank you. I didn’t know that a column in the table could be
considered a method as well. That clears up so much. Thanks again!

On 10/12/07, Hallik P. [email protected] wrote:

I am not sure how to run that command. I tried it from dos prompt in
project dir home doing this and didn’t seem to execute anything

script:console Order.new.respond_to? provider

You do it like this:

C:\myproject>ruby script/console

The “>>” is the console prompt. Now you can enter Ruby expressions in
the context of your Rails environment:

Order.new.respond_to? :provider
=> false

(note that respond_to? takes a symbol, so you need “:provider”, not
“provider”)

Learn the console. Love it. :~)

HTH

That was my bad. I should have explained the console better. Btw,
respond_to? will attempt to convert it’s argument to a symbol, so
anything responding to to_sym should work:

User.new.respond_to? ‘login’
=> true

User.new.respond_to? :login
=> true

-Bill

Bob S. wrote:

C:\myproject>ruby script/console
(note that respond_to? takes a symbol, so you need “:provider”, not “provider”)

Learn the console. Love it. :~)

HTH


Sincerely,

William P.

On 10/12/07, William P. [email protected] wrote:

That was my bad. I should have explained the console better. Btw,
respond_to? will attempt to convert it’s argument to a symbol, so anything
responding to to_sym should work:

User.new.respond_to? ‘login’
=> true

User.new.respond_to? :login
=> true

Right, but

User.new.respond_to? login

isn’t correct, and that’s what he was using.

Very true. I missed that. Have a good weekend.

Bob S. wrote:

Right, but

User.new.respond_to? login

isn’t correct, and that’s what he was using.


Sincerely,

William P.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs