2017-10-09 114 views
0

我是Ruby on Rails的新手。我正在關注Rails Guides教程。我已經構建了一個基本表單,它將titletext作爲輸入並存儲在數據庫中。 這裏是我的代碼:在Rails中路由

ArticlesController:

class ArticlesController < ApplicationController 

    def new 
    end 

    def create 
    @article = Article.new(article_params) 
    @article.save 
    redirect_to @article 
    end 

    def show 
    @article = Article.find(params[:id]) 
    end 

    private 

    def article_params 
    params.require(:article).permit(:title, :text) 
    end 
end 

的routes.rb:

Rails.application.routes.draw do 
    get 'welcome/index' 
    root 'welcome#index' 
    resources :articles 
end 

new.html.erb(形式):

<h1>New article</h1> 
<%= form_with scope: :article, url: articles_path, local: true do |form| %> 
<p> 
<%= form.label :title %><br> 
<%= form.text_field :title %> 
</p> 
<p> 
    <%= form.label :text %><br> 
    <%= form.text_area :text %> 
</p> 
<p> 
    <%= form.submit %> 
</p> 

當我點擊表單的提交按鈕後,我被帶到show視圖,在那裏顯示錶單的數據。但我無法理解這是怎麼發生的?我沒有提到要渲染show.html視圖,那麼Rails如何理解我必須呈現哪個視圖?我對此有點困惑。

注:我來自一個Django的背景,所以我將如何實現在Django路由是由我urls.py確定以該路徑所需的方法(從views.py)。然後我會渲染在views.py中的方法中定義的模板。

+0

redirect_to的語法糖相應顯示動作的'資源:文章「負責路由到適當的控制器/方法。至於渲染'show.html',如果控制器在視圖中找到'#method.htmll'文件,它將自動渲染該文件。 – hjpotter92

回答

2

你有你的配置定義resources :articles/routes.rb中文件,該文件是當你在最後的終端外殼

  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 

聲明redirect_to @article運行rake routes | grep articles產生以下路由的軌道helper方法def create ... end塊通過rails轉換爲'redirect_to /articles/@article.id',負責將響應重定向到articles#show中定義的動作app/controllers/articles_controller.rb

0

軌摹腳手架文章標題:字符串文本:字符串

運行上面的命令,你會得到你所期待的完整的應用程序。 你會明白路線中需要什麼。

0

請填寫路線引導

但現在作爲

article GET /articles/:id(.:format) 

,並在你創建你寫

redirect_to @article 

從而導致你的最後一行動作/文章/:id的實例變量@article

0

從您的代碼

def create 
      @article = Article.new(article_params) 
      @article.save 
     redirect_to @article 
     end 

@article保存成功後,要重定向它顯示的行動通過指定redirect_to的@article

如果你耙路線

article GET /article/:id(.:format)  articles#show 

所以show action的實際路由是article_path(@article)。您可以通過wri重定向到show action廷redirect_to的article_path(@article)或者即使你簡單地傳遞一個對象(@article)至redirect_to的方法,導軌將其重定向到由於url_for(@page)