Rails路由以及如何保持类别视图DRY?

时间:2011-02-19 20:05:02

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个与类别有belongs_to关联的模型。

示例:

    • belongs_to:category
  • 类别
    • has_one:thing

我应该为每个类别创建一个查看文件来查找给定的类别,例如:

views/things/category_name1.html.erb
views/things/category_name2.html.erb
views/things/category_name3.html.erb
views/things/category_name4.html.erb

或者有更方便的方法吗?

find方法中的类别名称外,每个类别的视图都相同。我试过这个:

<%= Thing.find(:all, :conditions => {:category => 'Name of category'}) %>

我希望我的网址为/category_name/name_of_thing

2 个答案:

答案 0 :(得分:2)

friendly_id gem将处理您正在寻找的URL生成。在你的路线中,你会想要有一些东西(Rails 3)。您不希望每个类别都有一个视图 - 这应该是动态的。

resources :categories do
  resources :things
end

答案 1 :(得分:1)

没有!不要创建那样的冗余视图。

将以下代码放入您的Category模型以及您希望拥有描述性网址的任何其他模型中:

def to_param
  return "#{id} #{name}".parameterize
end

假设nameCategory的属性,则会创建包含类别名称的唯一网址。如果您知道该名称肯定是唯一的,则可以仅使用name.parameterize替换返回行。