Rails动态路由到控制器的不同实例变量

时间:2013-07-28 05:28:31

标签: ruby-on-rails controller routing

首先,我是铁杆的新手 我有一个像这样的控制器。查询工作正常。

class StoreController < ApplicationController

  def men_clothing
    @men_clothing=Category.find_by_name("clothes").products.where(product_type: "men")
    @men_clothing_tshirt=Category.find_by_name("clothes").sub_categories.find_by_name("t-shirt").products
  end  

现在我有了 men_clothing 的视图,我可以通过迭代来显示 @men_clothing 实例变量中的所有产品。

但是在我的主页上,我有一个链接,我想指向 @men_clothing_tshirt 实例变量,以便点击该链接将显示此实例变量的所有产品。如果有另一个链接它应该指向不同的实例变量。

我应该如何实现这一目标?或建议另一种方法来做到这一点。请解释它是如何工作的。

我知道我可以通过为每个实例变量单独执行操作并为其创建视图来实现。但在这种情况下,我将不得不提出很多意见。

2 个答案:

答案 0 :(得分:1)

也许你可以试试similar to this link

[:tshirt, :pant, :banana_hammock].each do |category|
  get "mens_#{category}/:id", :controller => :mens, :action => :show, :type => category, :as => "mens_#{category}"
end

然后,您将获得您正在寻找的路径,例如mens_tshirt_pathmens_pant_path

在您的控制器中,您可以根据传入的“类型”更改要更改的操作

class MenController < ApplicationController
  before_filter :find_clothing_by_category

  private

  def find_clothing_by_category
    @clothing = Clothes.where(category: params[:type].to_s)
  end
end

答案 1 :(得分:0)

您的链接未重定向到您的实例,它会重定向到您的操作。所以你必须为新的link_to定义一个新方法,并在该方法中定义你的@men_clothing_tshirt对象,如下所示:

def your_method
  @men_clothing_tshirt=Category.find_by_name("clothes").sub_categories.find_by_name("t-shirt").products
end

并在link_to重定向到your_method

link_to "Tshirt", your_method_path

希望它会有所帮助。谢谢