我遇到了10个资源(控制器)对应于10个数据库条目的情况。特别是关于建筑物。有一个镇中心控制器,锯木厂控制器等等。如何处理这些资源
我不想创建一个buildings_controller并处理所有内容,因为每个建筑的行为都非常不同。
但我对路线有疑问,以及如何处理特定情况。我最好想有像这样的网址:
/town_center/view
/sawmill/view
这很好,但我有一个根本性的问题。没有简单的方法从url中获取town_center ID号码。我当然需要这些信息,以获得关于特定建筑物的模型信息。现在,人们可以说,我就可以用这个:
/town_center/view/1
/sawmill/view/2
这似乎很好,但带来了另一个根本的问题,那就是,我必须指定ID,当我从另一个控制器重定向。假设我想重定向到town_center控制器。我需要做的:
redirect_to town_center_url(1)
,我真的不喜欢,因为ID可以在我的数据库随时更改,一般是肯定的,很容易出错,一个不好的编程习惯。
你将如何处理?我错过了一个更简单的方法?
编辑:
所需要ID
scope :path => '/town_center', :controller => :town_center do
get '/view/:id' => :view, :as => 'town_center'
end
scope :path => '/sawmill', :controller => :sawmill do
get '/view/:id' => :view, :as => 'sawmill'
end
用法示例的
示例将来自/概述开始,我们看到这样的建筑链接的列表:
/town_center/view/1
/sawmill/view/2
如果点击第一个,则执行具有:id为1的视图动作。很好,直到现在。但是在这个视图模板上说,有一个像send_message这样的动作。现在,这个动作是这样的:
def send_message
send_the_message_blah_blah
redirect_to sawmill_url(2)
end
现在,我想这个问题是清楚的。为了重定向到锯木厂viewpath,我需要知道它的ID,这意味着我将不得不付出额外的查询,没有真正的理由,如:
def send_message
send_the_message_blah_blah
redirect_to sawmill_url(Building.where(:name=>'sawmill').first)
end
如果我不包括:在所有网址的id,然后我的视图操作只是不知道它应该参考的建筑物。
我很困惑,你可以发布你的'routes.rb'吗? – Azolo 2012-02-06 06:11:26
编辑说明我目前的路线 – Spyros 2012-02-06 06:13:49
你知道你可以在你的路径/网址中使用实例变量吗?除非我误会,否则这不会让你容易吗? redirect_to town_center_url @some_town_center – KobeJohn 2012-02-06 06:20:08