用于友好URL的轨道中的模型和控制器设计

时间:2012-08-25 23:36:21

标签: ruby-on-rails ruby activerecord friendly-id

来自rails newbie的另一个问题。我在rails 3.x

中使用了带有mysql的friendly_id gem

这是一个设计问题(在轨道中可能很容易)。我期待铁路专家的建议。我正在建立一个图书馆列表应用程序用户可以通过“都市区”或“城市”查看图书馆。例如:

我希望有以下网址:

www.list.com/library/san-francisco-bay-area

www.list.com/library/san-francisco-bay-area/palo-alto /

在数据库中我有表:

library
-------
id, name, city_id, slug

名称在这里被塞住,而city_id是FK

city
----
city_id, name, metro_area_id, slug

这里的名字是slugged而metro_area_id是FK

metro_area 
----------
metro_area_id, name, state, slug

名字在这里被砸了

因此,当用户将浏览器指向www.list.com/library/san-francisco-bay-area/palo-alto

我希望获得san-francisco-bay-area / palo-alto的图书馆清单。但是我的库表模型只包含了用于库名的slug。因此,如何解析此URL以查找可在库模型和控制器中使用的city_id以获取列表。

请记住,我不能只依赖城市的名称。我必须找到'palo-alto'的city_id,其中位于 metro'san-francisco-bay-area'。由于metro_area和city的slug在其他表中,因此设计模型和控制器的最佳方法是什么。

控制器的显示方法是:

def show
    @user = Library.find(params[:id])

    respond_to do |format|
       format.html # show.html.erb
       format.json { render json: @library }
    end
end

和模型是

class Library < ActiveRecord::Base
  attr_accessible :name, :city_id, :slug
  extend FriendlyId
  friendly_id :name, use: :slugged
end

根据我的友情网址要求,这不起作用。所以我希望得到专家的建议:)

1 个答案:

答案 0 :(得分:0)

也许你已经找到了解决方案,我也是新手,所以我只是猜测这会有用。

因为你想展示来自两个不同型号的slu ..我假设显示ID的方式类似于

www.list.com/libraries/:id/cities/:id/metro_areas/:id

可以通过添加Nested Resources

编辑路径文件来完成

至于显示两个ID,如

www.list.com/library/:city_id/:metro_area_id

Rails指南将其称为Dynamic Segments

在此之后,只需将id转换为slu ..

我还在FriendlyId的文档中找到了this,该文档正在解决您的问题。

希望有所帮助