我在代码审查上问了这个问题,但他们建议我在这里问
我正在尝试为我的表演动作中的每个网页创建自定义路线。
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)
保存现有电影的碎片
文档非常好,如果您有任何问题,请随时发表评论。