【问题标题】:Model and controller designs in rails for friendly URLRails 中的模型和控制器设计以实现友好的 URL
【发布时间】:2012-08-21 00:41:15
【问题描述】:

rails 新手的另一个问题。我在 rails 3.x 中使用 friendly_id gem 和 mysql

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

我希望有这样的网址:

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

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

在数据库中我有表格:

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

name 在这里,city_id 是 FK

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

name 在这里,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 来获取列表。

请记住,我不能只依赖城市的名称。我必须找到位于地铁“san-francisco-bay-area”中的“palo-alto”的city_id。由于 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

根据我的友好 URL 要求,这将不起作用。所以我会感谢专家的建议:)

【问题讨论】:

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


    【解决方案1】:

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

    因为您想展示两种不同型号的蛞蝓。我假设显示 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 转换为 slug 即可。

    我还在 FriendlyId 的文档中找到了this,该文档针对您的情况。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-18
      • 2016-08-18
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多