Ajax Update: error: undefined method `model_name'

Rails 3.1.3

I am not sure Rails can do what I want to do.

I have a form for update like,

<%= form_for script, :remote => true do |f| %>
<%= f.hidden_field :video_id %>
<%= f.text_field :startp, :readonly => true %>
<%= f.text_field :text %>
<%= f.submit “update” %>
<% end %>

then, JavaScript (jQuery) inserts a value for ‘startp’ and for ‘text’ in
to the ‘text_field’ .
Of course, this set of values is already stored in DB. I want to update
it after editing it.

This form gives an error

undefined method `model_name’ for NilClass:Class

whose I assume the cause is the nil object ‘Script’. The object is not
properly passed.

I try to render this form like following.

<%= render :partial => "update_script",:locals => { :script =>

Script.find_by_startp(params[:startp])} %>

Since ‘startp’ is readonly and users should be able to edit only ‘text’,
I hoped to associate the ‘text’ with ‘startp’ rather than ‘id’ of

Is there anyway to pass the obejct?

It is very difficult to explain the situation. But if someone can guess
the problem and have some suggestion, I would appreciate it.

Thanks .


On Sat, Feb 18, 2012 at 7:26 AM, Soichi I. [email protected]

   <%= f.submit "update"  %>


Is there anyway to pass the obejct?

In the “edit” controller, could you set:

def edit

startp = params[:startp] # or params[:script][:startp] ?
scripts = Script.find_all_by_startp(startp)
unless scripts.size == 1
@script = scripts.first # should really be ‘.single’


in the view

<%= render :partial => “update_script”,:locals => { :script =>

HTH (not entirely sure …),


*** Available for a new project ***

Peter V.

Thanks for your answer, although it does not quite work well.

The problem is that


is defined in _new_script.html.erb, where a new (script) text along with
startp are defined.

<%= form_for script, :remote => true do |f| %>
<%= f.hidden_field :video_id %>
<%= f.text_field :startp, :readonly => true %> <=HERE!!!
<%= f.text_field :text %>
<%= f.submit “save” %>
<% end %>

If there is a way to grasp it somehow in the controller and pass it to
update action, it seems fine.

Any idea?


<%= form_for script, :remote => true do |f| %>

Is ‘script’ in form_for above a local variable or a class? form_for
normally posts or puts to a class in this case a model. Thats is why you
are getting that error. It doesn’t look right to me. You have not
defined the model for form _for.

<%= form_for @script, :remote => true do |f| %>
<%= form_for :script, url: edit_script_path(), remote: true do |f| %>

hope it helps