我是ruby on rails的新手,我想了解这段代码如何重定向到show action感谢:
def create
@article = Article.new(params[:article])
@article.save
redirect_to @article
end
答案 0 :(得分:3)
如果使用定义RESTful路由的Rails约定来定义路由,即resources :articles
文件中的routes.rb
,那么redirect_to @article
会将您带到此show
页面特定的@article
实例。 Rails在这里做了潜在的魔术。
当您在resources :articles
文件中写routes.rb
时,Rails会自动为您生成这些路线:
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
所以你有这个特定的路线映射到articles
控制器的show
动作:
article GET /articles/:id(.:format) articles#show
当您执行以下操作时,此路线会匹配:redirect_to @article
这就是为什么它会将您转到此show
的{{1}}页。
要详细了解RESTful路线的工作原理,请参阅this Rails tutorial
答案 1 :(得分:2)
基本上你有以下路线:
_start:
jmp _Print;
_start_label:
jmp _Exit;
_Exit:
; exit stuff goes here
ret;
_Print:
;print stuff goes here
jmp _start_label;
要重定向到特定文章的Prefix Verb URI Pattern Controller#Action
article GET /articles/:id(.:format) articles#show
操作,您需要最终使用表格' / articles /:id'的字符串,并且有几个级别合成糖来实现这个目标:
show
您还可以明确指定路径,甚至是完整的URL:
redirect_to @article
redirect_to article_path(@article)
redirect_to article_path(@article.id)
虽然我不推荐这样做。
有关使用redirect_to "/articles/#{@article.id}"
redirect_to "http://myapp.com/articles/#{@article.id}"
答案 2 :(得分:1)
我是ruby on rails的新手
要了解它是如何工作的,你需要了解Ruby的本质,而不是Rails。
因为Rails是建立在Ruby之上的,所以它是面向对象编程模式的指数 - 应用程序的每个元素都应该面向创建&操纵对象:
虽然您的问题的答案在于此方法的 Rails 应用程序,但它的理解始于 Ruby 如何使其工作。
为了获得真正面向对象的体验,Ruby构建了classes,它们在内存中可用来操作&利用。调用这些类,并有一系列methods,您可以使用它们与它们进行交互。
在Rails的意义上(我对Ruby没有超级经验),这些方法有两种形式:
- 类方法(
def self.x
)- 实例方法(
def x
)
这些工作使您能够调用这些方法来操作您认为合适的对象。例如,如果您使用外星人创建游戏,则可以使用@alien.is_visible?
这是Ruby给我们的下划线结构。
<强>滑轨强>
因为 Rails 构建在 Ruby 之上(Ruby是语言,Rails是框架),所以你的答案在于Rails如何操纵你创建的对象。< / p>
要正确理解它,您需要知道Rails是MVC (Model View Controller)框架:
如您所见,Rails在 Models 中构建对象。这就是你可以致电@article = Article.find x
。
因此,当你问redirect_to @article
如何工作时,你需要记住Rails以某种方式构建其对象(IE带有一系列 base 方法 - 继承自{{1} }})。
这些方法为每个模型 object 提供了一个特定的结构,Rails可以在其帮助程序中使用它。这是ActiveRecord::Base
:
redirect_to
Rails希望其对象符合某个结构,由CRUD / RESTful routes支持:
因此,如果您有 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
(符合Rails&#39;模型结构,并且您的路由设置如下):
@article
Rails将能够获取#config/routes.rb
resources :articles
对象的实例,并使用它来填充Article
路由。
-
这就是Rails填充其许多辅助方法的方法,包括redirect_to
和form_for
。它是基于管理框架的惯例进行的智能猜测。
这就是为什么Rails程序员经常急于指出&#34; Railsy&#34;他们的代码是。