我正在使用Rails應用程序,並且對MVC和REST有點新。我試圖使用這些方法,但有幾個問題:Rails應用程序結構
- 我需要導航鏈接不直接對應「資源」。假設他們是「儀表板」「交易」和「餘額」。如何在控制器中對此進行建模?我是否只有一個「導航」控制器,它有三個操作,一個用於上面的每個單詞?
- 如果這是模擬應用程序的合理方式,我想我會製作匹配路線,說/ dashboard => Navigation#Dashboard,因爲我不想在URL中公開單詞「導航」。這看起來不錯,但在服務器中,當我執行渲染「儀表板」時,由於我直接調用它,因此URL顯示爲「導航/儀表板」而不是「儀表板」。我發現的唯一工作是重定向到'/ dashboard',但這似乎是錯誤的。
謝謝!
編輯: 真正的問題是,當有人去「登錄」,並且存在驗證錯誤時,我想顯示錯誤並呈現會話#new(這是頁面中的登錄)視圖。這會導致瀏覽器轉到/ sessions/new,但我希望它進入/ signin。我想避免使用redirect_to,因爲這會導致瀏覽器執行整個第二頁請求,這似乎不是「正確的」。
#routes.rb
match '/signin', :to => "sessions#new", :as => :signin
#sessions_controller.rb
def create
@title = "Sign In"
user = User.authenticate(params[:session][:email], params[:session][:password])
if user.nil?
flash[:error] = "Invalid email/password combination."
#I want to use render 'new', but that changes the URI in the browser to sessions/new, whereas I want to maintain /signin without redirecting
redirect_to signin_path
else
sign_in user
redirect_to dashboard_path
end
end
@dombesz - 是的,但是我理解它的方式,然後我只能使用「redirect_to dashboard_path」,但我需要執行「render dashboard_path」,但這不能正常工作。 – skaz 2011-04-10 23:42:23
@skaz請參閱我的更新回答 – dombesz 2011-04-11 00:21:30
@dombesz - 所有這些都有道理。我的問題的根源在於我是否可以調用'render [something]'並將該頁面呈現到頁面而不會將瀏覽器中的uri更改爲'navigation/dashboard',因爲我想隱藏「導航」部分該網址,並使其只是'site.com/dashboard'。當我渲染任何東西時,該動作顯示'/ controller/action'的默認路徑,我不想redirect_to,因爲這是來自瀏覽器的另一個調用。我希望這是有道理的。感謝您的幫助。 – skaz 2011-04-11 11:59:41