我有一个带有以下模型组织的rails应用程序:
广告:
class Ad < ActiveRecord::Base
belongs_to :area
...
区域:
class Area < ActiveRecord::Base
has_many :ads
...
我需要做的是,对于每个区域:
我现在拥有的是:
show.html.erb:
<% Area.order(:name).each do |area| %>
<li><%= link_to area.name, XXXX_path(area_id: area.id) %></li>
<% end -%>
Routes.rb:
match 'XXXX' => 'ads#index' , :as => :XXXX
但我有两个不好的影响:
有什么建议吗?
由于
答案 0 :(得分:1)
首先,你需要slug来在url中使用区域名称。您可以使用FriendlyId来实现此目的。
然后您可以按如下方式定义路线,
get '/:area' => 'ads#index' , :as => :area
但要小心!您必须在routes文件的末尾定义此路由。否则,其他路线可能无法正常工作。
然后您可以使用帮助程序生成URL,
<%= link_to area.name, area_path(area: <slug-column>) %>
建议,
您应该将区域放在/areas
段下。这样他们就不会干扰其他路线。
get '/areas/:id' => 'ads#index' , :as => :area
如果您有更多区域/广告路线,则可以使用嵌套的RESTful路线
resources :areas do
resources :ads
end