我一直在努力让我的Rails创建URL来显示记录,方法是使用标题而不是URL中的ID,例如:
/职位/ A-后约-火箭
在线教程后,我做了以下工作:
因为ID不再在URL中,所以我们必须稍微更改代码.
class Post < ActiveRecord::Base
before_create :create_slug
def to_param
slug
end
def create_slug
self.slug = self.title.parameterize
end
end
Run Code Online (Sandbox Code Playgroud)
创建帖子时,标题的URL友好版本存储在数据库的slug列中.
我们还必须使用slug列更新查找以查找记录,而不是使用ID.
class ProjectsController < ApplicationController
def show
@project = Project.find_by_slug!(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
此时它似乎工作除了显示记录,因为find_by_slug!还不存在.
我是一个极端的新手 - 我应该在哪里定义它?
dea*_*rds 19
这不一定是你问题的直接答案,但是你看过Stringex插件(http://github.com/rsl/stringex)吗?这是为您的记录自动创建slugs的好方法.
您可以在模型中添加以下内容:
class Post < ActiveRecord::Base
acts_as_url :title
end
Run Code Online (Sandbox Code Playgroud)
它将从你的标题中自动创建slug并将其保存到slug列.
它的创造方式也非常聪明.例如,标题为"10%折扣,仅限今天"变成"仅限今天10%折扣".
很漂亮!
jdl*_*jdl 13
find_by_foo不是您需要定义的东西.只要你有一个名为"foo"的列,ActiveRecord就会为你服用.像你一样添加感叹号将导致在没有找到记录时抛出异常,而不是在不使用感叹号的情况下返回nil而没有异常.
至于你的具体问题,你把你的slug添加到Post,但你正在尝试搜索Project.
| 归档时间: |
|
| 查看次数: |
19433 次 |
| 最近记录: |