轨道 - to_param将斜杠更改为"%2F",可以覆盖它吗?



我正在使用宝石祖先,并尝试构建我的路线以显示父母和孩子之间的层次结构。

位置.rb

def to_param
if self.ancestors?
get_location_slug(parent_id) + "/" + "#{slug}"
else
"#{slug}"
end
end
def get_location_slug(location_id)
location = Location.find(location_id)
"#{location.slug}"
end

这完美地工作了 99%,并且干净地显示了我的路线 - 但它在我的路由中显示"%2F"而不是"/"与父:

localhost:3000/locations/location-1 (perfect)
localhost:3000/locations/location-1%2Flocation-2 (not quite perfect)

Routes.rb(共享以防万一(

match 'locations/:id' => 'locations#show', :as => :location, :via => :get
match 'locations/:parent_id/:id' => 'locations#show', as: :location_child, via: :get

奖励问题:这目前涵盖位置和位置。我如何将其扩展到涵盖子位置和曾孙位置?提前感谢!

只是想分享我的解决方案,希望能帮助到某人。

首先,我清理了模型中的方法:

def to_param
slug
end

然后,调整了我的路线:

get 'locations/:id', to: 'locations#show', as: :location
get 'locations/:parent_id/:id', to: 'locations#show_child', as: :location_child

然后,我在应用程序帮助程序中创建了一个新方法,用于为有/没有父级的位置生成这些 URL:

def get_full_location_path(location)
if location.ancestors?
location_child_path(location.root, location)
else
location_path(location)
end
end

最后,在我看来,我只需调用我的帮助程序方法来生成正确的 URL:

<%= link_to location.name, get_full_location_path(location) %>

这似乎运作良好,但我的下一个任务是将其扩展到涵盖祖父母和曾祖父母。任何建议不胜感激!

相关内容

  • 没有找到相关文章

最新更新