这是如何发送到Show动作的

时间:2015-09-26 02:28:30

标签: ruby-on-rails ruby ruby-on-rails-3 redirect

我是ruby on rails的新手,我想了解这段代码如何重定向到show action感谢:

def create
  @article = Article.new(params[:article])
  @article.save

  redirect_to @article
end

3 个答案:

答案 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}"

的更多方式,请参阅API docs

答案 2 :(得分:1)

  

我是ruby on rails的新手

要了解它是如何工作的,你需要了解Ruby的本质,而不是Rails。

OOP

因为Rails是建立在Ruby之上的,所以它是面向对象编程模式的指数 - 应用程序的每个元素都应该面向创建&操纵对象

enter image description here

虽然您的问题的答案在于此方法的 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)框架:

enter image description here

如您所见,Rails在 Models 中构建对象。这就是你可以致电@article = Article.find x

的原因

因此,当你问redirect_to @article如何工作时,你需要记住Rails以某种方式构建其对象(IE带有一系列 base 方法 - 继承自{{1} }})。

这些方法为每个模型 object 提供了一个特定的结构,Rails可以在其帮助程序中使用它。这是ActiveRecord::Base

的情况
redirect_to

Rails希望其对象符合某个结构,由CRUD / RESTful routes支持:

enter image description here

因此,如果您有 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

enter image description here

Rails将能够获取#config/routes.rb resources :articles 对象的实例,并使用它来填充Article路由。

-

这就是Rails填充其许多辅助方法的方法,包括redirect_toform_for。它是基于管理框架的惯例进行的智能猜测。

这就是为什么Rails程序员经常急于指出&#34; Railsy&#34;他们的代码是。