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
'script'.

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 .

soichi

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’

end

in the view

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

HTH (not entirely sure …),

Peter

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

The problem is that

':startp'

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?

soichi

  <%= 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. It doesn't look right to me.

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

hope it helps