【问题标题】:rails newbie - how to change querystring into routerails newbie - 如何将查询字符串更改为路由
【发布时间】:2012-01-20 05:26:02
【问题描述】:

通过实施博客,我以大多数人的方式学习 Rails。我刚刚添加了标签,并且我的文章视图达到了在您显示文章时显示可点击标签的程度。问题是链接是这样出来的;

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

rails 的最佳实践方式是什么?我是否需要实现一个“tagged_with”动作并创建一个助手,或者是否有一些 Rails 路由魔法可以快速解决这个问题?

编辑:最终找到答案

【问题讨论】:

    标签: ruby-on-rails ruby rails-routing


    【解决方案1】:

    尝试在您的路线中添加类似的内容(未经测试):

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

    然后:

    link_to(tag, tagged_articles_path(:tagged_with=>"foobar"))
    

    【讨论】:

    • 无论如何我都会给你点,谢谢你花时间回答
    【解决方案2】:

    我最终找到了答案:我需要一条“命名路线”。如果其他人有这个问题,我只是把它放在我的 routes.rb 文件中;

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

    然后简单地用这个替换我的“link_to”;

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

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 2013-11-02
      • 2011-01-16
      • 1970-01-01
      • 2011-05-06
      • 2017-08-14
      • 2015-04-17
      • 2015-04-12
      • 2011-04-06
      相关资源
      最近更新 更多