简体   繁体   中英

Having trouble sorting using Ruby on rails and acts as list, position won

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM