Маршрутизация к новому действию (Rails) - PullRequest
3 голосов
/ 19 января 2009

У меня есть действие в моем PostsController с именем 'tagged', которое я хочу вернуть всем сообщениям, отмеченным тем или иным термином.

В моем route.rb есть следующее (вверху):

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

Тем не менее, переход к сообщениям / тегам / да возвращает ошибку RecordNotFound:

Couldn't find Post without an ID

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

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

Ответы [ 2 ]

1 голос
/ 20 января 2009

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

map.resources :posts, :member => { :tagged => :put }
1 голос
/ 19 января 2009

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

  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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...