2011-02-19 23 views
0

我有一个模型,具有belongs_to关联到类别。Rails路由和如何保持类别视图DRY?

例子:

  • 事情
    • belongs_to的:类
  • 类别
    • HAS_ONE:事情

我应该为每个类别视图文件,找到定类别,例如:

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

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

resources :categories do 
    resources :things 
end 
+0

那宝石比我的硬核更健壮,但基本答案(+1) –

+0

如何在控制器中创建视图动态以及类别视图“模板”应该放在哪里? –

+0

查看“show”资源部分中的入门指南:http://guides.rubyonrails.org/getting_started.html#showing-an-individual-post – bensie

1

不!不要创建这样的冗余视图。

将下面的代码在你的Category模型,并希望任何其他模型使用描述性网址:

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

假设nameCategory的属性,这将创建一个包含类别名称的唯一URL。如果你知道这个名字肯定是独一无二的,那么你可以用name.parameterize替换返回行。

+1

使用to_param也可以工作,但只要使用name.parameterize,您还需要更新控制器中的Category.find(params [:id])调用。 – bensie

+0

这是正确的,忘记了这一点。 –

+0

我应该制作一个类别布局吗?我如何创建视图动态? –