Using Jquery plugin "tokenInput" with rails

Hi,

I made a contact manager app using rails. I added TokenInput plugin to introduce an instant contact search functionality in it. Tried following a railscast http://railscasts.com/episodes/258-token-fields but have been struggling with it for a while. Following is the code I use in my view

<%= form_tag({:action => ‘show’, :id => @contact_tokens}, :remote => true, :method=> :get) do %>

<%= label_tag “contact_tokens” %> <%= text_field_tag “contact_tokens”, @contact_tokens %>

<div class="action">
    <%= submit_tag "Show Details" %>
</div>

<% end %>

Where, Show is the action where this particular contact will be displayed. But when I am trying to render this view, it show following error,

No matching routes found for {controller “Contacts”, action “Show” id=>nil"}

I am not able to understand why is it showing id as nil. Or say why isn’t anything being passed from the text field used for the search.

Have a look in log/development.log to see what parameters are being passed when you click the link. Then have a look at the Rails Guide on Debugging which will show you techniques that you can use to debug the code.

Colin

I went through the log. The contact_tokens parameter is being passed as nil, i.e., “contact_tokens”=>“”.

This is happening even when the text field is actually populated.

Regards Sumit Srivastava

The power of imagination makes us infinite…

I went through the log. The contact_tokens parameter is being passed as nil, i.e., "contact_tokens"=>"".

This is happening even when the text field is actually populated.

Can you post that section of the log please. (And please don't top post, it makes it difficult to follow the thread. Insert your reply inline in previous message. Thanks)

The power of imagination makes us infinite...

I am quite happy the size I am thanks.

Colin

I went through the log. The contact_tokens parameter is being passed as nil,

i.e., “contact_tokens”=>“”.

This is happening even when the text field is actually populated.

Can you post that section of the log please. (And please don’t top

post, it makes it difficult to follow the thread. Insert your reply

inline in previous message. Thanks)

Here is the log, Started GET “/contacts/212?utf8=%E2%9C%93&contact_tokens=&commit=Show+Details” for 127.0.0.1 at Mon Aug 13 13:08:33 +0530 2012 Processing by ContactsController#show as JS Parameters: {“utf8”=>“✓”, “id”=>“212”, “commit”=>“Show Details”, “contact_tokens”=>“”} User Load (0.2ms) SELECT “users”.* FROM “users” WHERE (username =‘sumit’) LIMIT 1 Contact Load (0.2ms) SELECT “contacts”.* FROM “contacts” WHERE “contacts”.“id” = ? LIMIT 1 [[“id”, “212”]] Rendered contacts/_show.html.erb (0.8ms) Rendered contacts/show.js.erb (2.0ms) Completed 200 OK in 7ms (Views: 4.1ms | ActiveRecord: 0.4ms)

> > >> >> > I went through the log. The contact_tokens parameter is being passed >> > as >> > nil, >> > i.e., "contact_tokens"=>"". >> > >> > This is happening even when the text field is actually populated. >> >> Can you post that section of the log please. (And please don't top >> post, it makes it difficult to follow the thread. Insert your reply >> inline in previous message. Thanks) > > > Here is the log, > Started GET > "/contacts/212?utf8=%E2%9C%93&contact_tokens=&commit=Show+Details" for > 127.0.0.1 at Mon Aug 13 13:08:33 +0530 2012 > Processing by ContactsController#show as JS > Parameters: {"utf8"=>"✓", "id"=>"212", "commit"=>"Show Details", > "contact_tokens"=>""} > User Load (0.2ms) SELECT "users".* FROM "users" WHERE (username > ='sumit') > LIMIT 1 > Contact Load (0.2ms) SELECT "contacts".* FROM "contacts" WHERE > "contacts"."id" = ? LIMIT 1 [["id", "212"]] > Rendered contacts/_show.html.erb (0.8ms) > Rendered contacts/show.js.erb (2.0ms) > Completed 200 OK in 7ms (Views: 4.1ms | ActiveRecord: 0.4ms)

Strange. I suggest checking there is no error in the html of the page with the form on. Copy the complete html source out of your browser (View > Page Source or similar) and paste it into the w3c html validator at The W3C Markup Validation Service.

Colin

Here is my code, validator was marking ruby code as errors.

What do you mean it was marking the ruby code as errors? It is the html that you are supposed to be validating.

Colin

I went through the log. The contact_tokens parameter is being passed

as

nil,

i.e., “contact_tokens”=>“”.

This is happening even when the text field is actually populated.

Can you post that section of the log please. (And please don’t top

post, it makes it difficult to follow the thread. Insert your reply

inline in previous message. Thanks)

Here is the log,

Started GET

“/contacts/212?utf8=%E2%9C%93&contact_tokens=&commit=Show+Details” for

127.0.0.1 at Mon Aug 13 13:08:33 +0530 2012

Processing by ContactsController#show as JS

Parameters: {“utf8”=>“✓”, “id”=>“212”, “commit”=>“Show Details”,

“contact_tokens”=>“”}

User Load (0.2ms) SELECT “users”.* FROM “users” WHERE (username

=‘sumit’)

LIMIT 1

Contact Load (0.2ms) SELECT “contacts”.* FROM “contacts” WHERE

“contacts”.“id” = ? LIMIT 1 [[“id”, “212”]]

Rendered contacts/_show.html.erb (0.8ms)

Rendered contacts/show.js.erb (2.0ms)

Completed 200 OK in 7ms (Views: 4.1ms | ActiveRecord: 0.4ms)

Strange. I suggest checking there is no error in the html of the page

with the form on. Copy the complete html source out of your browser

(View > Page Source or similar) and paste it into the w3c html

validator at http://validator.w3.org/#validate_by_input.

Colin

Here is my code, validator was marking ruby code as errors.

What do you mean it was marking the ruby code as errors? It is the

html that you are supposed to be validating.

Colin

I verified the html for the view. No error related to the form was found. What else could be the problem?

Make sure there are no errors at all, if there are any errors anywhere on the page you cannot be sure that anything will work, as the browser is having to guess what you meant and sometimes it gets it wrong. It is the most basic rule of debugging, first fix all the problems that are clearly identified. You cannot imagine the amount of time that is wasted trying to track down a tricky bug, whilst saying "that simple error that I know about cannot possibly cause this other problem in an entirely different bit of code" which in the end turns out to be a side effect of the first problem. So fix all the html validation problems first. It may not fix the submit problem but you have to do it sometime after all, so do it now.

The next time you find a website that is behaving strangely or does not look right then paste the url into the validator (I expect you saw that you can give it a url rather than paste in the code) and it is very likely there are errors. The site may well have been tested in one browser and the errors did not appear to matter. Using another browser, or even a update to the browser, can change the way it interprets invalid html and the page breaks.

Colin

Hi Sumit. Have you solved this problem?

Colin

Colin,

Yes, I did. I was using wrong dom id to save the tokeninput data and that was misleading my app.

Regards Sumit Srivastava

The power of imagination makes us infinite…