我正在建立一个培训网站,我正在尝试根据内容标题生成内容的动态路径,内容标题是数据库中的一列。我走得很远,但我在最后一部分遇到了问题。
假设内容标题是“商务旅行”,即商务旅行培训课程。使用下面显示的代码,模板中的link_to helper方法生成如下链接:
http://localhost:3000/courses/Business Travel
我需要的是用破折号分隔的单词,例如Stack Overflow问题URL的格式。
这是否有内置方法?或者我是否必须编写一个辅助函数来操作内容对象的title属性为URL友好的东西?或者......我这样做完全是错误的吗?
contentcontroller.rb
class ContentController < ApplicationController
before_action :signed_in_user
def tracks
end
def courses
@courses = Content.all
end
def show
@course = Content.find_by_title(params[:title])
end
end
content.rb
class Content < ActiveRecord::Base
validates :title, presence: true
validates :description, presence: true
end
courses.html.erb
<% provide(:title, 'Tracks') %>
<div class="container">
<% @courses.each do |course| %>
<div class="row">
<%= link_to course_path(course.title) do %>
<div class="col-md-12 course-box content-link centertext">
<strong><%= course.title %></strong>
<p><%= course.description %></p>
</div>
<% end %>
</div>
<% end %>
</div>
的routes.rb
match '/courses/:title', to: 'content#show', via: 'get', as: 'course'
答案 0 :(得分:2)
基本上你正在寻找的是slugged url。看看friendly_id
gem
https://github.com/norman/friendly_id
入门非常容易。查看Rails Quickstart
部分,这可以让您加快速度。
为了您的方便。
在Gemfile
gem 'friendly_id'
在终端中运行以下命令
rails generate friendly_id
rails generate migration add_slug_to_content slug:string
编辑生成的迁移文件以包含
add_index :contents, :slug, unique: true
运行rake migration
rake db:migrate
将以下内容添加到您的内容类
class Content < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
validates :title, presence: true
validates :description, presence: true
end
这应该会自动将URL转换为模型ID:)