2017-02-23 81 views
0

因此,我有一個'項目'模型,其中相應的數據庫表有很多屬性。劃分Rails編輯視圖用於UI

理想的情況下,當我打projects/1/edit,我想用戶:

  1. 見,並能編輯只有項目的一部分屬性
  2. 看到一個導航菜單,可她的導航到另一個視圖允許查看和編輯剩下的屬性。

所有這些而不是在一個「編輯」視圖中顯示所有屬性。

我傾向於一個JS解決方案,當單擊菜單時隱藏和顯示特定屬性。不過,我最好要對網址反映部分用戶位於例如:

而不是像projects/1/edit一個網址,我想是這樣的: projects/1/edit/name_of_section_1projects/1/edit/name_of_section_2

在我不知道任何情況下,在分割這樣的觀點時,最佳做法是什麼?

UPDATE:

配置/ routes.rb中:

我已經成功地使用了他的第二個方法修改他的建議代碼如下只有少數精度/修訂從下面丹的解決方案以供將來參考 修訂控制器名添加這兩種路線 '項目'

resources :projects do 
    member do 
     get "settings/:panel" => "projects#edit", as: :settings 
     patch "settings/:panel/update" => "projects#update", as: :update_settings 
    end 
end 

控制器/ projects_controller.rb 有在編輯操作所提出的一些代碼錯誤,所以我稍微改變了它,使其工作

def edit 
    panel = ['general', 'invitations', 'welcome_message', 'danger'].detect{|p| p == params[:panel] } 
    render template: "projects/#{panel}.html.erb" if panel 
    end 

回答

1

有幾個方法可以做到這一點,有全部同樣有效。 如果你需要的所有填充創造記錄的字段你要麼需要有標籤的JavaScript意見(引導有這個一個不錯的插件)

要使用定製路由做到這一點,你可以有: resources :projects do member do get "settings" patch "update_settings" get "settings2" patch "update_settings2" end end

這將使你喜歡的網址和/projects/1/settingsprojects/1/update_settings

如果你有很多面板,你可以像這樣的東西更有效地做到這一點:

resources :projects do 
    member do 
    get "settings/:panel" => "settings#edit" as: :settings 
    patch "settings/:panel/update" => "settings#update" as: :update_settings 
    end 
end 

允許像在你的控制器/projects/1/settings/page1/projects/1/settings/page2

路線,那麼你可以有:

def edit 
    if panel = ['page1', 'page2'].detect{|p| p == params[:panel] } 
    render template: panel 
    end 
end 

這個檢查IFS其有效的面板,您做了,然後將呈現特定的模板您創建在app/view/projects/page1.html.erb

+0

丹,非常感謝您的回覆。請讓我試試看,並回到你身邊。我認爲我需要試着去解決這個問題。我會盡快告訴你它怎麼走 – Andrew

+0

丹,我已經嘗試了你的第二種方法成功。非常感謝。我仍然得到Rails的縈繞,有時會與如何設置路線混淆,所以你爲我節省了時間! 我剛剛更新了我的問題,以反映我必須對代碼進行的一些修訂才能使其工作。如果有什麼東西不適合你。讓我知道。乾杯。 – Andrew

+0

甜如。修訂聽起來正確。這是我寫作時的晚餐時間,而我的妻子正在給我那種說「快點」的表情。隨意接受它作爲答案,我會成爲一個快樂的人:) – Dan