【发布时间】:2011-08-02 14:41:03
【问题描述】:
我正在开发一个 Rails 应用程序,对 MVC 和 REST 有点陌生。我正在尝试使用这些方法,但有几个问题:
- 我需要有不直接对应于“资源”的导航链接。假设它们是“仪表板”、“交易”和“余额”。如何在控制器中对此建模?我是否只有一个用于“导航”的控制器,它具有三个操作,一个用于上述每个单词?
- 如果这是对应用程序建模的合理方法,我想我会匹配显示 /dashboard => Navigation#Dashboard 的路由,因为我不想在 URL 中公开“导航”一词。这看起来不错,但是在服务器中,当我渲染“仪表板”时,URL 显示“导航/仪表板”而不是“仪表板”,因为我直接调用了它。我发现的唯一解决方法是重定向到“/dashboard”,但这似乎是错误的。
谢谢!
编辑: 真正的问题是,当有人转到“登录”并且出现验证错误时,我想显示错误,并呈现 session#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
【问题讨论】:
标签: ruby-on-rails model-view-controller rest