Rails - to_param 将斜杠更改为“%2F”,可以覆盖它吗?
Rails - to_param changes slash to "%2F", possible to override this?
我正在使用 gem 祖先,并尝试构建我的路线以显示 parents 和 children 之间的层次结构。
Location.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”而不是“/” parent:
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
奖金问题:目前涵盖 root 位置和 child 位置。我如何扩展它以涵盖 grandchild 位置和 great grandchild 位置?提前致谢!
只是想分享我的解决方案,希望对某人有所帮助。
首先,我清理了模型中的方法:
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
然后,我在我的应用程序助手中创建了一个新方法来为位置 with/without 和 parent:
生成这些 URLs
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) %>
这似乎工作得很好,但我的下一个任务是扩展它以涵盖 grandparents 和 great-grandparents。任何建议表示赞赏!
我正在使用 gem 祖先,并尝试构建我的路线以显示 parents 和 children 之间的层次结构。
Location.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”而不是“/” parent:
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
奖金问题:目前涵盖 root 位置和 child 位置。我如何扩展它以涵盖 grandchild 位置和 great grandchild 位置?提前致谢!
只是想分享我的解决方案,希望对某人有所帮助。
首先,我清理了模型中的方法:
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
然后,我在我的应用程序助手中创建了一个新方法来为位置 with/without 和 parent:
生成这些 URLsdef 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) %>
这似乎工作得很好,但我的下一个任务是扩展它以涵盖 grandparents 和 great-grandparents。任何建议表示赞赏!