views:

102

answers:

1

I have Groups that has_many projects. I also created an order view that is similar to my Show view. The reason for creating an additional view is that I am using the Group#show view for a primary display in my site.

So I have the following in my Groups_Controller

 def order
  @group = Group.find(params[:id])
 end

 def sort 
  @group = Group.find(params[:id]) 
  @group.projects.each do |p|
  p.position = params['group_projects'].index(p.id.to_s) + 1
  p.save
 end
render :nothing => true 
end

Then in my view

<ul id="group_projects">
  <% @group.projects.each do |p|%>  
<li class="project_<%= p.id %>"><%= p.title %> - <%= p.position %></li>
  <% end -%>

 <%= sortable_element 'group_projects', :url => { :action => "sort", :id => @group }, :complete  => visual_effect(:highlight, 'group_projects')%>

I have not messed with my routes, but I wonder if thats part of the problem.

So the sorting works but its not saving the position. The error I am getting is the following:

Processing GroupsController#sort (for 127.0.0.1 at 2010-05-03 11:14:19) [POST]
Parameters: {"authenticity_token"=>"vODeoGHH4osrDeBY+fBI/x+YgEs6SJBO15cF/qLqW5o=", "id"=>"1"}
User Load (47.6ms)   SELECT * FROM "users" WHERE ("users"."id" = 1) LIMIT 1
Group Load (0.5ms)   SELECT * FROM "groups" 
Group Load (0.2ms)   SELECT * FROM "groups" WHERE ("groups"."id" = 1) 
Project Load (1.7ms)   SELECT * FROM "projects" WHERE ("projects".group_id = 1) ORDER BY position

NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.index):
app/controllers/groups_controller.rb:136:in `sort'
app/controllers/groups_controller.rb:135:in `sort'

Rendered rescues/_trace (106.7ms)
Rendered rescues/_request_and_response (1.2ms)
Rendering rescues/layout (internal_server_error)

Any ideas on how I can solve this problem. I know there's a nil.Object, I just don't see how.

A: 

Without having the line numbers to match with the error, it looks like the line

p.position = params['group_projects'].index(p.id.to_s) + 1

is where the problem lies. params['group_projects'] is coming back nil for some reason.

Hober
the lines in question are: @group.projects.each do |p| p.position = params['group_projects'].index(p.id.to_s) + 1
TJ Sherrill
Exactly. So you're trying to `.index()` on the line I quoted. For some reason, `params['group_projects']` is coming back nil.
Hober