十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
小編給大家分享一下Ruby on rails的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
體驗(yàn)一中添加了一個(gè)最基本的支架和一個(gè)簡單的數(shù)據(jù)遷移,實(shí)現(xiàn)了一個(gè)基本的增刪改查的功能列表。體驗(yàn)二中要在次功能上繼續(xù)豐滿一下功能。實(shí)現(xiàn)如下效果:
在每個(gè)公司中都包含有不同的部門,按照體驗(yàn)一中的方法,添加一個(gè)部門的支架,一個(gè)數(shù)據(jù)遷移。實(shí)現(xiàn)部門的增刪改查功能。部門的數(shù)據(jù)結(jié)果如下:
具體方式省略。
簡單創(chuàng)建了支架而沒有定制應(yīng)用,它將難以使用,為了給一個(gè)公司添加部門,將會邊的很麻煩。我們把我們希望的頁面和支架生成的部門的頁面比較一下:
Cid和Chargeuserid先不用做關(guān)聯(lián),手添即可,只是為了能夠重新組織頁面。
部門列表和創(chuàng)建部門的頁面看起來和我們想要的頁面上出現(xiàn)的內(nèi)容非常相似,目標(biāo)頁面中間部分看起來像是作為列表,而末尾像創(chuàng)建部門頁面。
接下來是今天要整理的內(nèi)容:把一個(gè)頁面的內(nèi)容分解到幾個(gè)文件里。
首先要理解三個(gè)概念:
(1) 布局:為一系列網(wǎng)頁設(shè)定統(tǒng)一的外觀,大多數(shù)會提供出現(xiàn)在每個(gè)頁面頂部和底部的標(biāo)準(zhǔn)的HTML元素。
(2) 模板:模版是頁面的主要內(nèi)容,模版與動作相關(guān)聯(lián)。
(3) 局部模板:一個(gè)模版會調(diào)用多個(gè)不同的局部模版來建立頁面的主要內(nèi)容,局部模版允許把一個(gè)復(fù)雜模版分解為多個(gè)更小的部分,允許把公共的內(nèi)容分離出來,比如菜單和導(dǎo)航欄,局部模版可以被模版使用,它也可以被布局直接使用。
布局、模版、局部模板這三種嵌入式Ruby(ERB)文件組成一個(gè)網(wǎng)頁。
創(chuàng)建添加部門表單的局部模板:
局部模板只是另外一種ERB文件,它包含著與模板相同的標(biāo)簽類型。此時(shí)的項(xiàng)目的views結(jié)構(gòu)如下圖:
通過拷貝app/views/departments/new.html并且另存為app/views/companies/_new_department.html.erb來創(chuàng)建局部模板。一個(gè)重要的事情就是局部模板以字符_開始,Rails通過字符_來區(qū)分頁面模板和局部模板。
在模版中包含局部模版:
我們要在company的show.html.erb頁面模版來把創(chuàng)建的局部模版包含在它的輸出里,局部模板和模板一樣,僅僅只是一段偽裝成HTML樣子的Ruby代碼,通過一個(gè)render命令到company的頁面中:
現(xiàn)在局部模板應(yīng)該已經(jīng)添加到company的頁面中了,讓我們看一下show.html.erb Company頁面查看信息是否現(xiàn)實(shí)正確?,F(xiàn)實(shí)內(nèi)容如下:
感覺好奇怪,我們看一下app/views/departments/new.html、app/views/companies/_new_department.html.erb文件中的內(nèi)容:
1New department
2 3 <%= render 'form' %> 4 5 <%= link_to 'Back', departments_path %>
看來問題出現(xiàn)在<%= render 'form' %>這個(gè)地方,這里是頁面直接跳轉(zhuǎn)到_form.html.erb頁面。所以就會出現(xiàn)如上頁面現(xiàn)實(shí)的問題。
下面將app/views/companies/_new_department.html.erb改為如下內(nèi)容(從app/views/departments/_form.html.erb將里面的內(nèi)容復(fù)制出來的信息,因?yàn)樘砑硬块T的頁面同樣是直接跳轉(zhuǎn)到此頁面)避免沖突問題:
1 <%= form_for(@department) do |f| %> 2 <% if @department.errors.any? %> 3412 <% end %> 13 14<%= pluralize(@department.errors.count, "error") %> prohibited this department from being saved:
5 67 <% @department.errors.full_messages.each do |msg| %> 8
11- <%= msg %>
9 <% end %> 1015 <%= f.label :name %>18
16 <%= f.text_field :name %> 1719 <%= f.label :cid %>22
20 <%= f.text_field :cid %> 2123 <%= f.label :chargeuserid %>26
24 <%= f.text_field :chargeuserid %> 2527 <%= f.label :desc %>30
28 <%= f.text_area :desc %> 2931 <%= f.submit %> 3233 <% end %>
下面再看瀏覽器請求的結(jié)果:
什么意思,又出錯(cuò)了,看來說是@department為空,可是在添加部門的頁面這個(gè)是正常工作的啊,為什么呢?對比一下模板中的內(nèi)容是一樣的,問題在于@department變量,額,問題就是這個(gè),原來的時(shí)候創(chuàng)建一個(gè)部門是由DepartmentsController控制的,此刻改為CompaniesController控制,在DepartmentController中調(diào)用create方法的時(shí)候調(diào)用如下代碼:
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)原來在調(diào)用create的時(shí)候它本身給定義好了一個(gè)空的department的實(shí)例變量,知道問題,那么就來解決這個(gè)問題
我們需要將頁面中的@department改為一個(gè)局部變量。
1New department
2 3 <%= form_for(department) do |f| %> 4 <% if department.errors.any? %> 5614 <% end %> 15 16<%= pluralize(department.errors.count, "error") %> prohibited this department from being saved:
7 89 <% department.errors.full_messages.each do |msg| %> 10
13- <%= msg %>
11 <% end %> 1217 <%= f.label :name %>20
18 <%= f.text_field :name %> 1921 <%= f.label :cid %>24
22 <%= f.text_field :cid %> 2325 <%= f.label :chargeuserid %>28
26 <%= f.text_field :chargeuserid %> 2729 <%= f.label :desc %>32
30 <%= f.text_area :desc %> 3133 <%= f.submit %> 3435 <% end %> 36 37 38 <%= link_to 'Back', departments_path %>
如何把局部變量傳遞給局部模板:
由于局部模板就像是函數(shù),考慮到DepartmentController中給@departmentde可以所使用的值,由于表單會被用來初始化department,所以我們只要用一下方法給表單傳遞一個(gè)新的Department對象:
<%= render :partial => "new_department", :locals=>{ :department => Department.new } %>
下面在看一下頁面的結(jié)果:
工作正常,但是下面有兩個(gè)Back,額,額,由于局部模板中的Back沒有去掉,但是此時(shí)已經(jīng)不需要從創(chuàng)建department到department列表了,此處就刪掉吧。簡單的很。
以上是“Ruby on rails的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道!
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。