рельсы новичка - как изменить строку запроса в маршрут - PullRequest
1 голос
/ 20 января 2012

Я изучаю рельсы так, как это делают большинство, внедряя блог.Я только что добавил теги и получил представление моей статьи до того момента, когда он отображает кликабельные теги при отображении статьи.Проблема в том, что ссылки выглядят так:

http://localhost:3000/articles?tagged_with=development

Я бы предпочел не иметь строку запроса, а вместо этого иметь что-то вроде:

http://localhost:3000/articles/tagged_with/development

Я не могу найти ничего релевантного в руководстве "маршруты наизнанку" на сайте rails (там много полезного, только не это!)

Полный код здесь: https://github.com/mikeyhogarth/mikeyblog

Соответствующими битами являются:

ссылка в _article.html.erb:

<%= link_to tag, articles_path(:tagged_with => tag) %>

контроллер индекса статей:

def index

 if(params[:tagged_with])
   @tag = params[:tagged_with]
   @articles = Article.tagged_with @tag
 else
   @articles = Article.all
 end

 respond_to do |format|
   format.html # index.html.erb
   format.json { render json: @articles }
 end
end

какой метод рельсов лучший способ сделать это?Нужно ли реализовать действие «tagged_with» и создать помощника, или есть какая-то магия маршрутизации рельсов, которая может разобраться в этом в один миг?

РЕДАКТИРОВАТЬ: В конце концов нашел ответ

Ответы [ 2 ]

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

Попробуйте добавить что-то подобное в ваши маршруты (не проверено):

match '/articles/tagged/:tagged_with' => 'articles#index', :as => :tagged_articles

Тогда:

link_to(tag, tagged_articles_path(:tagged_with=>"foobar"))
1 голос
/ 20 января 2012

В конце концов я нашел ответ: мне нужен «именованный маршрут». Если у кого-то еще есть этот вопрос, я просто помещаю его в мой файл rout.rb;

match "/articles/tagged_with/:tag" => "articles#index", :as => "articles_tagged_with"

затем просто переназначить мое "link_to" с этим;

    <%= link_to tag, articles_tagged_with_path(:tag => tag) %>, 
...