How to do a simple update on the server from a change of a s


#1

I have a list of items on a page. Each item has a select list. If
someone changes the select list I would like to update the appropriate
record on the server…nothing else. I suspect I am making this too
difficult.

I have an action on my controller for updating this value. I just
tried the ‘remote_function’, ah, function. It invokes the action on
the controller but the the value of the select that it is connected to
is not sent.

I hope I am missing something simple.

The controller action is:

def update_status
goal = Goal.find(params[:id])
goal.status = params[:goal][:status]
goal.save
end

The relevant form part looks like this

<%= select_tag(‘goal[status]’, options_for_select(GoalStatus::STATES,
goal.status), :onfiltered=> remote_function(:url =>
:update_status, :id => goal })) %>

Asked another way, how can I send the value of the form element
associated with the remote_function?

Is there a better way to do this?

Thanks


#2

I’m still working on this and still looking for help… :-}

I’ve made a few changes. Now I’m using form_remote_tag and submitting
the
form with an onchange event. The form does get submitted. Even though
there
is nothing to update on the web page I specify an :update parameter and
have
the action do a render_partial. The action is being called. Now the
problem
is that the partial gets displayed and nothing else. The output of the
partial refreshes the entire page instead of updating just the specified
div.

Any suggestions?

Now my controller method looks like this:

def update_status
goal = Goal.find(params[:id])
goal.status = params[:goal][:status]
goal.save
render :partial => ‘list_row’, :locals =>{:goal => goal}
end

my list_row partial looks like this (some rows deleted just to keep it
brief)

<%=h goal.goal -%> <%=h goal.task -%> <%=h goal.comments -%> <%= form_remote_tag( :update => "gl_#{goal.id}", :url => { :action => 'update_status', :id => goal}) -%> <%= select_tag('goal[status]', options_for_select(GoalStatus::STATES, goal.status), :onChange => 'this.form.submit()') -%> <%= end_form_tag -%>