您好,登錄后才能下訂單哦!
小編給大家分享一下Ruby on rails的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
體驗一中添加了一個最基本的支架和一個簡單的數據遷移,實現了一個基本的增刪改查的功能列表。體驗二中要在次功能上繼續豐滿一下功能。實現如下效果:
在每個公司中都包含有不同的部門,按照體驗一中的方法,添加一個部門的支架,一個數據遷移。實現部門的增刪改查功能。部門的數據結果如下:
具體方式省略。
簡單創建了支架而沒有定制應用,它將難以使用,為了給一個公司添加部門,將會邊的很麻煩。我們把我們希望的頁面和支架生成的部門的頁面比較一下:
Cid和Chargeuserid先不用做關聯,手添即可,只是為了能夠重新組織頁面。
部門列表和創建部門的頁面看起來和我們想要的頁面上出現的內容非常相似,目標頁面中間部分看起來像是作為列表,而末尾像創建部門頁面。
接下來是今天要整理的內容:把一個頁面的內容分解到幾個文件里。
首先要理解三個概念:
(1) 布局:為一系列網頁設定統一的外觀,大多數會提供出現在每個頁面頂部和底部的標準的HTML元素。
(2) 模板:模版是頁面的主要內容,模版與動作相關聯。
(3) 局部模板:一個模版會調用多個不同的局部模版來建立頁面的主要內容,局部模版允許把一個復雜模版分解為多個更小的部分,允許把公共的內容分離出來,比如菜單和導航欄,局部模版可以被模版使用,它也可以被布局直接使用。
布局、模版、局部模板這三種嵌入式Ruby(ERB)文件組成一個網頁。
創建添加部門表單的局部模板:
局部模板只是另外一種ERB文件,它包含著與模板相同的標簽類型。此時的項目的views結構如下圖:
通過拷貝app/views/departments/new.html并且另存為app/views/companies/_new_department.html.erb來創建局部模板。一個重要的事情就是局部模板以字符_開始,Rails通過字符_來區分頁面模板和局部模板。
在模版中包含局部模版:
我們要在company的show.html.erb頁面模版來把創建的局部模版包含在它的輸出里,局部模板和模板一樣,僅僅只是一段偽裝成HTML樣子的Ruby代碼,通過一個render命令到company的頁面中:
現在局部模板應該已經添加到company的頁面中了,讓我們看一下show.html.erb Company頁面查看信息是否現實正確。現實內容如下:
感覺好奇怪,我們看一下app/views/departments/new.html、app/views/companies/_new_department.html.erb文件中的內容:
1 <h2>New department</h2> 2 3 <%= render 'form' %> 4 5 <%= link_to 'Back', departments_path %>
看來問題出現在<%= render 'form' %>這個地方,這里是頁面直接跳轉到_form.html.erb頁面。所以就會出現如上頁面現實的問題。
下面將app/views/companies/_new_department.html.erb改為如下內容(從app/views/departments/_form.html.erb將里面的內容復制出來的信息,因為添加部門的頁面同樣是直接跳轉到此頁面)避免沖突問題:
1 <%= form_for(@department) do |f| %> 2 <% if @department.errors.any? %> 3 <div id="error_explanation"> 4 <h3><%= pluralize(@department.errors.count, "error") %> prohibited this department from being saved:</h3> 5 6 <ul> 7 <% @department.errors.full_messages.each do |msg| %> 8 <li><%= msg %></li> 9 <% end %> 10 </ul> 11 </div> 12 <% end %> 13 14 <div class="field"> 15 <%= f.label :name %><br> 16 <%= f.text_field :name %> 17 </div> 18 <div class="field"> 19 <%= f.label :cid %><br> 20 <%= f.text_field :cid %> 21 </div> 22 <div class="field"> 23 <%= f.label :chargeuserid %><br> 24 <%= f.text_field :chargeuserid %> 25 </div> 26 <div class="field"> 27 <%= f.label :desc %><br> 28 <%= f.text_area :desc %> 29 </div> 30 <div class="actions"> 31 <%= f.submit %> 32 </div> 33 <% end %>
下面再看瀏覽器請求的結果:
什么意思,又出錯了,看來說是@department為空,可是在添加部門的頁面這個是正常工作的啊,為什么呢?對比一下模板中的內容是一樣的,問題在于@department變量,額,問題就是這個,原來的時候創建一個部門是由DepartmentsController控制的,此刻改為CompaniesController控制,在DepartmentController中調用create方法的時候調用如下代碼:
1 # POST /departments 2 # POST /departments.json 3 def create 4 @department = Department.new(department_params) 5 6 respond_to do |format| 7 if @department.save 8 format.html { redirect_to @department, notice: 'Department was successfully created.' } 9 format.json { render action: 'show', status: :created, location: @department } 10 else 11 format.html { render action: 'new' } 12 format.json { render json: @department.errors, status: :unprocessable_entity } 13 end 14 end 15 end
@department = Department.new(department_params)原來在調用create的時候它本身給定義好了一個空的department的實例變量,知道問題,那么就來解決這個問題
我們需要將頁面中的@department改為一個局部變量。
1 <h2>New department</h2> 2 3 <%= form_for(department) do |f| %> 4 <% if department.errors.any? %> 5 <div id="error_explanation"> 6 <h3><%= pluralize(department.errors.count, "error") %> prohibited this department from being saved:</h3> 7 8 <ul> 9 <% department.errors.full_messages.each do |msg| %> 10 <li><%= msg %></li> 11 <% end %> 12 </ul> 13 </div> 14 <% end %> 15 16 <div class="field"> 17 <%= f.label :name %><br> 18 <%= f.text_field :name %> 19 </div> 20 <div class="field"> 21 <%= f.label :cid %><br> 22 <%= f.text_field :cid %> 23 </div> 24 <div class="field"> 25 <%= f.label :chargeuserid %><br> 26 <%= f.text_field :chargeuserid %> 27 </div> 28 <div class="field"> 29 <%= f.label :desc %><br> 30 <%= f.text_area :desc %> 31 </div> 32 <div class="actions"> 33 <%= f.submit %> 34 </div> 35 <% end %> 36 37 38 <%= link_to 'Back', departments_path %>
如何把局部變量傳遞給局部模板:
由于局部模板就像是函數,考慮到DepartmentController中給@departmentde可以所使用的值,由于表單會被用來初始化department,所以我們只要用一下方法給表單傳遞一個新的Department對象:
<%= render :partial => "new_department", :locals=>{ :department => Department.new } %>
下面在看一下頁面的結果:
工作正常,但是下面有兩個Back,額,額,由于局部模板中的Back沒有去掉,但是此時已經不需要從創建department到department列表了,此處就刪掉吧。簡單的很。
以上是“Ruby on rails的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。