2009-01-19 17 views
3

У меня есть действие в моем PostsController с именем 'tagged', которое я хочу вернуть всем сообщениям, помеченным любым термином.Маршрутизация в новое действие (Rails)

В моем routes.rb я следующее (в верхней части):

map.connect 'posts/tagged/:tag', { :controller => 'posts', :action => 'tagged', :tag => /[a-z\-]+/ } 

Но перейдя сообщения/помеченный/да возвращаю ошибка RecordNotFound:

Couldn't find Post without an ID 

В моем помечено. html.erb, я в конечном итоге буду использовать метод find_tagged_with из act_as_taggable_on_steroids, но на данный момент я поставил простой Post.find (: all), чтобы исключить возможность ошибки.

Похоже, что my map.connect переопределяется, и возникает такая же ошибка, даже если я комментирую весь файл route.rb, кроме моей новой строки.

ответ

1

Хорошо, потому что вы можете прокомментировать маршруты по умолчанию, что означает, что проблема не в ваших маршрутах. Это значит, что ваше тегированное действие в контроллере сообщений, вероятно, имеет что-то вроде этого.

def tagged 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @post } 
    end 
    end 

Или, может быть, если вы потратили немного больше времени, это выглядит следующим образом:

def tagged 
    @post = Post.find(params[:tagged]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @post } 
    end 
    end 

Где, как то, что вы хотите это:

def tagged 
    @post = Post.find(:all, :conditions => {:tagged => params[:tagged]}) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @post } 
    end 
    end 

Во всяком случае, вы должны писать функционал тесты для этого, а не тестирование в браузере.

1

Почему бы не добавить RESTful-маршрут для «помеченного» действия?

map.resources :posts, :member => { :tagged => :put } 
Смежные вопросы