这是我的更新功能,当某些内容被更新时,它会完美地转到 http://localhost:3000/articles/2
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end
redirect_to @article
如何工作并显示 artiles/2/页面?
下面是我的路线
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
welcome_index GET /welcome/index(.:format) welcome#index
root GET / welcome#index
最佳答案
神奇的方法是polymorphic_url
。
当您调用 link_to
、redirect_to
等并且您不传递字符串或路由选项的散列时,Rails 将最终调用此方法。
Active Record(和 Active Model 兼容对象)有一个 model_name
类方法,它返回一个 ActiveMethod::Name 对象,它有一堆方法来获取模型类的“正确”名称各种用途。
其中一个 (singular_route_key
) 说明了路径中模型使用的名称。如果您在引擎中,这还会处理诸如命名空间之类的事情。
在最简单的情况下,这可以归结为
@article.class.model_name.singular_route_key #=> 'article'
Rails 然后通过将其与任何前缀选项和正确的后缀('url'、'path' 等)连接起来,从中生成方法名称,并以类似 article_url
的方法名称结尾>。然后调用该方法(根据您的路由文件为您生成),传递文章,该文章返回本文的 url。
关于ruby-on-rails - redirect_to 方法如何在 ruby 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23082683/