首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >友好URL在rails中的模型和控制器设计

友好URL在rails中的模型和控制器设计
EN

Stack Overflow用户
提问于 2012-08-25 23:36:21
回答 1查看 180关注 0票数 0

另一个来自rails新手的问题。我在rails 3.x中使用mysql

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

我希望有这样的网址:

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

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

在数据库中我有表:

代码语言:javascript
复制
library
-------
id, name, city_id, slug

名字在这里被插入,而city_id是FK

代码语言:javascript
复制
city
----
city_id, name, metro_area_id, slug

名字在这里被插入,而metro_area_id是FK

代码语言:javascript
复制
metro_area 
----------
metro_area_id, name, state, slug

名字在这里

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

我想要旧金山湾区/帕洛阿尔托的图书馆名单。但我的库表模型只包含库名的段塞。那么,如何解析这个URL以找到可以在库模型和控制器中使用的city_id来获取列表。

请记住,我不能只依靠城市的名字。我必须找到位于旧金山湾区的“帕洛阿尔托”(Palo)的city_id。由于用于metro_area和city的段塞在其他表中,那么设计模型和控制器的最佳方法是什么。

控制器的显示方法是:

代码语言:javascript
复制
def show
    @user = Library.find(params[:id])

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

模型是

代码语言:javascript
复制
class Library < ActiveRecord::Base
  attr_accessible :name, :city_id, :slug
  extend FriendlyId
  friendly_id :name, use: :slugged
end

这将不符合我友好的URL要求。因此,我希望得到专家的建议:)

EN

回答 1

Stack Overflow用户

发布于 2013-01-01 04:26:58

也许你已经找到了你的解决方案,我对rails也很陌生,所以我猜想这会解决问题。

因为你想展示两种不同型号的子弹。我想显示I的方式应该是

代码语言:javascript
复制
www.list.com/libraries/:id/cities/:id/metro_areas/:id

这可以通过添加嵌套资源编辑路由文件来完成

至于只显示两个ids,如

代码语言:javascript
复制
www.list.com/library/:city_id/:metro_area_id

Rails指南将其称为动态段

在那之后,这只是一个把ids转换成子弹的问题。

我还在FriendlyId的文档中找到了针对您的案例的

希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12126523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档