如何在Rails中创建自定义路由?根据习惯我的意思是对params做出反应

时间:2012-12-31 22:29:10

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

所以基本上我已经设置了匹配“products /:product”的路线,它似乎响应了像baseurl / products / toaster这样的页面,并显示了烤面包机产品。我的问题是我似乎无法使用link_to来生成这条路径,而我的意思是我不知道如何。对此有何帮助?

2 个答案:

答案 0 :(得分:3)

这个有几个解决方案:

<%= link_to 'Toaster', { :controller => 'products', :action => 'whatever', :product => 'toaster' } %>

但它并不是真正的Rails Way,因为你需要在路线的末尾添加:as => :product。这将创建可以这种方式使用的product_path助手:

<%= link_to 'Toaster', product_path(:product => 'toaster') %>

答案 1 :(得分:2)

在您的路线文件中,您可以执行以下操作:

match "products/:product" => "products#show", :as => :product

控制器为ProductsController且视图为show

在您的产品控制器中

  def show
    @product = Hub.find_by_name(params[:product])

    respond_to do |format|
      format.html # show.html.erb
    end
  end

产品中的任何内容/ :产品部分将通过参数提供。

然后,由于我们在您的路线中使用:as,您可以使用link_to执行此操作:

<%= link_to product(@product) %>

其中@product是产品或字符串的实例。这只是一个例子,param可以是你想要的任何东西,控制器/动作也是如此。有关详细信息,请查看this.

希望这有帮助!