2012-04-26 43 views
2

我剛開始拿起Ruby on Rails。我很喜歡它,但我遇到了障礙。我知道解決問題的兩種方法,但我很好奇「Rails方式」是做什麼的。什麼是「Rails方式」加載模板頁面

的設置

我有一個索引頁,列出項目說明。當用戶點擊一個項目時,它將它們帶到項目控制器的show功能。列表中的項目從MySQL數據庫加載。


我想要做什麼,

我希望能夠加載每個項目的具體信息「項目頁面。」該信息由文檔,代碼示例等組成。每個頁面將具有相同的通用模板。


路1

商店的HTML,並在「節」表中的文本在MySQL數據庫中,並加載所有有關該項目的部分。顯示每個部分向下的頁面。


路2(就我寧願做)

具有與完整的文檔每個項目單獨視圖。加載在show功能加載


評論

有沒有,我不習慣,因爲我來自使用CodeIgniter的思維Rails的一些第三條道路根據項目具體的看法?

我完全適應「Rails方式」,但我只是不確定這種事情的恰當約定是什麼。

或者是這個問題的一個例子,你怎麼做都沒關係?

在此先感謝。

回答

1

有很多方法可以做到這一點,最簡單的方法之一就是覆蓋默認模板(render:action不會在目標action only模板中運行任何代碼) 這是您的問題中的Way2。例如:

def show 
    @project = Project.find(params[:id]) 
    if @project.has_template? 
    render :action => "show_#{@project.template_name}" and return 
    end 
    render :action => "show" 
end 

在這個例子中的目錄應用程序/視圖/項目應爲每個項目 模板中包含「show.html.erb」爲默認的和「show_myspecialproject.html.erb」與TEMPLATE_NAME項目名稱「myspecialproject」等...

Template_name是一個告訴你,如果項目有這樣或應該使用默認的方法,你可以把任何邏輯放在這個方法中,它可以是附加的列id表或只是template_name可以是等於項目名稱,或者只是檢查文件是否存在於當前目錄中。

您還可以,如果你想,因爲你必須代碼重複使用show.html.erb並保持你的模板幹用局部模板。 http://rails.rubyonrails.org/classes/ActionView/Partials.html 這樣

控制器動作是默認

def show 
    @project = Project.find(params[:id])  
end 



in show.html.erb 
<h1><%= @project.name %></h1> 
<%= render @project.tamplate_name %> 

在這個例子中所有的局部模板應該開始 「_」, 例。 :「_myspecialproject.html.erb」

+0

所以,對於'「秀_#{@ project.template_name}」'TEMPLATE_NAME將是存儲視圖的名稱來加載數據庫中的列?視圖需要在哪個文件夾中?還有一種方法可以在另一個視圖中加載它?我希望每個項目頁面具有相同的標題。我只需要在每個視圖中複製標題?我對所有問題表示歉意,我對Rails非常陌生,並且仍在繼續討論所有的約定。 – 2012-04-26 08:31:58

+0

更新了我的回答 – Fivell 2012-04-26 08:50:53

+0

我選擇了這個答案,因爲我現在可以更快地開發頁面。一旦我有了設計和部分被沖刷出來,我將最終轉向Marlin Pierce在路上的答案。這些都是做這件事的好方法。 – 2012-04-26 18:10:03

1

如果每個項目都有相同的通用模板,我不知道這個值是具有不同觀點的東西。

這裏有一個建議嘗試大小。

可以存儲文檔,代碼示例等在部分表,或者在它自己的表中的每個類型。如果您在分區表中包含它們,請包含一個類型字段,併爲每個類型使用不同的類。假設文檔和CodeExample是兩個這樣的類。

使用:conditions選項爲每個類型定義項目類中的has_one。

class Project < ActiveRecord::Base 
    has_one :documentation, :conditions => { :type => "Documentation" } 
    has_one :code_example, :conditions => { :type => "CodeExample" } 
end 

class Documentation < ActiveRecord::Base 
    set_table_name "sections" 
    belongs_to :project 
end 

如果要組織項目顯示頁面以包含各個部分,可以爲每個部分類型調用部分。

如果你想讓你的項目展示頁面,有一個鏈接或選項卡(可以實現使用鏈接或CSS格式的按鈕在頁面上的標籤)去展示動作的部分類型的控制器。爲此,使用嵌套路由可能是您想要使用的想法。

resources :projects do 
    resource :documentation 
    resource :code_example 
end 

這些是一些想法。如果你不想這樣做,你可以從我的想法中得到你想要的。

+0

有一些理由,我認爲比混亂的例子更好。另外,我意識到我並不確切知道你在做什麼,所以我很好奇你在想什麼。如果項目展示頁面總是與一個模板相同,那麼你真的不會有問題。我懷疑你對一個項目有不同的看法,其中一個是文檔,另一個代碼示例。 – 2012-04-26 13:37:43

+0

這更多的是Rails的方式來簡化控制器只有七個標準動作,並且每個動作不超過一個模板,而是增加控制器。因此,Documentation和CodeExample應該有自己的控制器。 – 2012-04-26 13:39:17

+0

擁有文檔類和CodeExample類,無論他們有自己的表還是使用STI,都可以爲您提供不同的行爲方式。就像代碼示例中有一個用於顏色標記的格式化程序一樣。這會給你方法,你可以調用你的代碼示例特定的模板,避免使用助手。幫手並不壞,但我謹慎地使用它們,而不是模型中的東西。 – 2012-04-26 13:41:44

相關問題