Rails-通过Rails路由更改URL标题



我在代码审查上问了这个问题,但他们建议我在这里问

我正在尝试为我的表演动作中的每个网页创建自定义路线。

Movie.all.each do |movie|
  match "/#{movie.title.downcase}", to: 'movies#show', via: 'get', 
  as: :"#{movie.title.downcase.gsub(/[:.]/, '').gsub(' ', '_')}"
end

此代码将每个网页与我未找到的网页相匹配。

resources :movies, except: [:show]

它应该将网页与实际页面相匹配。

我的视图文件夹中只有一个show.html.erb文件。这可能是问题所在吗?

是否可以对视图文件名使用字符串插值?

我不能使用Rails REST路由,因为我需要更好的URLS。

/Movie Title

是比更好的URL吗

/movies/1

这就是为什么我需要优化这个代码。它是有效的,但还需要改进。

我不知道怎么解决这个问题。以下是我想到的几件事。

Using Rails route redirection to another action
Using wildcard as view names (*.html.erb)

记住:我唯一的目标是将URL名称更改为电影标题

这可以使用FriendlyId gem 轻松实现

链接如下:

https://github.com/norman/friendly_id/blob/master/README.md

将其添加到您的Gemfile

然后将以下内容添加到您的模型中:

class Movie < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, use: :slugged

然后在rails控制台上运行:

Movie.find_each(&:save)

保存现有电影的碎片

文档非常好,如果您有任何问题,请随时发表评论。

最新更新