我为我的文章模型实现了一个非常简单的 slugification :
# app/controllers/articles_controller.rb
def show
@article = Article.find_by(slug: params[:slug])
end
# config/routes.rb
resources :articles, param: :slug
它的工作原理几乎没问题。但是有一个问题:
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article # <- here is the problem
else
render 'new'
end
end
此redirect_to
重定向到articles/:id
而不是articles/:slug
。
我必须在哪里配置?
答案 0 :(得分:1)
创建新路线:
# config/routes.rb
get 'articles/:slug', to: 'articles#show', as: :article_with_slug
并使用它:
# app/controllers/articles_controller.rb
def create
@article = Article.new(article_params)
if @article.save!
redirect_to article_with_slug(slug: @article.slug)
else
render :new
end
end
答案 1 :(得分:1)
您可以覆盖Article#to_param
方法,也可以使用更明确的重定向目标(推荐)。
取代:
redirect_to @article
使用:
redirect_to article_path(@article.slug)
# or:
redirect_to article_path(slug: @article.slug)
to_param
方法将改变模型在Rails中的行为方式,如果您希望能够将记录直接传递给form_for
(以及其他构建器),则可能需要这样做。 />
您可以override it at the instance level,也可以使用the class level helper。