Assigning a variable with an input field

Hello all,

I am using a jquery plugin to search content on a page and highlight
keywords. The function call looks like this:

I want the user to be able to assign the variable @found through an
input field. It seems like it should be fairly easy but I am new to
rails and have difficulty trying to make this work.

So far I have tried to create a method in the controller such as:

def found
@found = “”
#I’ve also tried @found = gets.chomp but that looks funny in rails
end

and then create the input field like such:

<%= form_tag do %>
<%= text_field :found, :found %>
<%= submit_tag(“Post”) %>
<% end %>

The page looks fine but it does not assign the variable.

If I try
<%= form_tag(@found) do %>
<%= f.text_field :found %>
<%= f.submit_tag(“Post”) %>
<% end %>

I get errors.

I may be going about this the wrong way. Any advice would be great.
Thanks

On Apr 25, 2013, at 11:20 AM, Brentwood R. wrote:

I may be going about this the wrong way. Any advice would be great.

You are possibly confused on more than 1 issue, but there’s not enough
info in your message to be sure or to let anyone provide a really
complete answer. (In particular, do you expect the user to enter the
value and then be able to perform the search all in the page, or is the
user submitting a form back to the server and a new page being
rendered?)

That said:

  1. The ruby code in the rails controller runs just before render, and
    affects the page that is sent to the browser. So the controller might
    change the javascript that’s in the page as it’s sent, but no ruby code
    will be run and no ruby variables will be evaluated after it’s sent.

  2. highlight(‘@found’); will pass the literal string @found to the
    highlight function, if you want to substitute a ruby variable value in
    there, you need highlight(‘<%= @found %>’)–assuming of course that
    @found has its value while the page is being rendered

  3. What do you mean by “does not assign the variable”? What ruby will
    get in the post is a hash of params, and it’s up to you how you use
    that. In the most common use, you’d use a form with a model object, but
    here you’re just trying to get 1 value, so use of form_tag is probably
    appropriate, and in that case you want text_field_tag, not text_field.


Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice

Scott,

Thanks for your response.

I’ll try to be more precise. The way the jquery plugin work is that if
I place a keyword in the function call like so:

…all instances of “something” will be highlighted in the ‘div’. What
I’m trying to do is make it so that a user can enter a keyword (through
an input field) so that whatever keyword they entered would be
highlighted on the page.

I figured that what might work was to put some variable in the function
and assign the value of the variable through the input field.

I’ve looked around on stack overflow and I’m wondering if I should be
using javascript with the text field to assign the value of the variable
instead of ruby.

On Apr 25, 2013, at 4:41 PM, Brentwood R. wrote:

…all instances of “something” will be highlighted in the ‘div’. What
I’m trying to do is make it so that a user can enter a keyword (through
an input field) so that whatever keyword they entered would be
highlighted on the page.

OK. This has nothing at all to do with ruby or rails. What you want is a
javascript event handler on the input field which then calls that
highlight function. You’d call something like:

$(‘div’).highlight($(‘#my_input_field’).val())

How you arrange to call that varies, you could set up the event handler
directly as an option in the text_field_tag call in the .html.erb
template:

<%= text_field_tag(:my_input_field, ‘’, {onchange:
‘call_the_highlight_fun()’}) %>

You could skip the embedded ruby altogether since you’re not really
using rails in that little piece and just put in and
tags.

Or you could use “unobtrusive javascript”, which I prefer: leave the
input field alone, and in a document loaded handler, add the event
handler to the input field:

$(function() {$(‘#my_input_field’).change(function()
{call_the_highlight_fun()})})

Note that:

  • I’m whipping this off the top of my head, not all syntax may be
    correct, but you seem to be looking for help with the general approach.

  • I’m assuming jquery.

  • I’m assuming recent rails and ruby 1.9 (thus the {symbol: value}
    syntax for a hash).


Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice