Конкретный ответ на ваш вопрос
map.resources :lists, :collection => { :share => :get, :share_callback => :get }, :member => { :add => :put }
add
действие действует на участника, а не на коллекцию.
Но в вашем коде есть другие проблемы. Во-первых, вы всегда должны использовать помощники Rails для генерации URL. На самом деле путь /lists/add/<%= @list.id %>
неверен. Это должно быть /lists/<%= @list.id %>/add
Изменение
<a href="/lists/add/<%= @list.id %>" class="button">
<span class="add_list">Learn these words</span>
</a>
до
<% link_to add_list_path(@list), :class => "button" do %>
<span class="add_list">Learn these words</span>
<% end %>
Контроллер может быть упрощен. Переместите is_logged_in?
отметку «до».
class MyController < ActionController::Base
before_filter :require_logged_user, :only => %w( add )
def add
list = logged_in_user.copy_list(params[:id])
if list.save
flash[:notice] = "This list is now in your stash."
redirect_to stash_zoom_nav_quiz_path(list, "zoomout", "new", "quizoff")
else
flash[:notice] = "There was a problem adding this list."
redirect_to :back
end
end
protected
def require_logged_user
if !is_logged_in?
redirect_to :controller => "users", :action => "signup_and_login", :list_id => params[:id]
end
end
end