生成具有特定模型属性的rails路由

时间:2014-04-04 02:47:46

标签: ruby-on-rails-4

我正在建立一个培训网站,我正在尝试根据内容标题生成内容的动态路径,内容标题是数据库中的一列。我走得很远,但我在最后一部分遇到了问题。

假设内容标题是“商务旅行”,即商务旅行培训课程。使用下面显示的代码,模板中的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'

1 个答案:

答案 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:)