Ruby on rails 如何仅对rails中的某些链接使用slug

Ruby on rails 如何仅对rails中的某些链接使用slug,ruby-on-rails,ruby,pretty-urls,Ruby On Rails,Ruby,Pretty Urls,在我的rails应用程序中,我使用一个slug而不是ID来美化查看帖子时的url 因此,在我的articles.rb文件中,我目前对所有链接都使用此链接: def to_param slug end 这会产生一个url,如:…articles/This-is-a-test-article 我现在只想在编辑帖子时使用普通的id url格式,有没有办法修改它以允许我这样做 i、 e.…第/7条 作为参考,在我的文章中,我有: def edit @article = Article.f

在我的rails应用程序中,我使用一个slug而不是ID来美化查看帖子时的url

因此,在我的articles.rb文件中,我目前对所有链接都使用此链接:

 def to_param
    slug
  end
这会产生一个url,如:…articles/This-is-a-test-article

我现在只想在编辑帖子时使用普通的id url格式,有没有办法修改它以允许我这样做

i、 e.…第/7条

作为参考,在我的文章中,我有:

def edit
@article = Article.find_by_slug(params[:id])
end

任何帮助都将不胜感激,谢谢。

因此,在参数中,您总是会得到
params[:id]
,有时这等于您想要的文章的长度,有时则等于id

在前一种情况下,你应该说

@article = Article.find_by_slug(params[:id])
@article = Article.find_by_id(params[:id])
在后一种情况下,你应该说

@article = Article.find_by_slug(params[:id])
@article = Article.find_by_id(params[:id])
您可以使用before_过滤器来管理这一点,在编辑操作或类似操作中不使用该过滤器

编辑:

要创建使用id而不是params的链接,只需在helper中指定:如果通过对象,rails将调用对象上的_param来生成params[:id]的值。您不必通过对象:

edit_article_path(:id => @article.id)

您只需将其添加为
before\u action
即可,仅适用于您想要
slug
的方法,并且从
before\u action

像这样的

before_action :set_article, only: [:show,:update, :destroy]

def edit

@article = Article.find_by_id(params[:id])

end

private
def set_article
@article = Article.find_by_slug(params[:id])
end

友好的\u id

你用它会好得多

这正是您所需要的(您已经有了
slug
列,您需要这样做):

这意味着您可以执行以下操作:

article_path(@article) #-> can have either id or slug attributes present

这将使用
id
slug
填充
:id
参数,这取决于存在的参数,允许您在控制器中调用
find
方法。是否有类似
@article=article.find\u by\u slug(参数[:id])的功能(例如before\u过滤器)
在你的控制器中?是的,对不起,我会把它添加到问题中。你可以在你需要的方法之前添加它作为
,除了
edit
方法。谢谢Max,唯一的问题是,当我点击一个链接进行编辑时,我希望路由/url中有ID,而不是slug,这可能吗?谢谢Pavan,我已经意识到了这一点,我的问题是
def to_param slug end
使所有链接都有slug而不是id,当我转到编辑部分时,我需要链接中的id谢谢Rich,我认为这回答了最好的问题,但是对我来说最好的方法是手动定义路径并按id查找:
def edit_article_path()“/articles/#{@article.id}/edit”end
def edit@article=article.find(params[:id])end