我正在开发一个Rails应用程序,对MVC和REST来说是一些新东西。我正在尝试使用这些方法,但有几个问题:
谢谢!
编辑: 真正的问题是,当有人进入“登录”并且存在验证错误时,我想显示错误,并呈现会话#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
答案 0 :(得分:3)
对于问题的第一部分,我经常发现自己处于这样一个位置,即网站的“实用”功能无法很好地映射到资源上。通常,我会将它们粘贴在某种实用控制器中。您可以尝试使用DashboardController并定义方法navigation
,balances
,transactions
等等。
对于第二部分,您是否尝试过:
match '/dashboard' => 'navigation#dashboard'
这应该适用于您描述的内容。如果您还没有,请阅读有关路由的Rails指南:http://guides.rubyonrails.org/routing.html。
答案 1 :(得分:1)
使用导航控制器很好。在您的路线中,您可以为其定义自定义名称。
#routes.rb
match "/dashboard" => "navigation#dashboard", :as => "dashboard"
通过定义dashboard_path
:as => "dashboard"
<强>更新强>
你不能render dashboard_path
。如果您在render 'dashboard'
,则可以NavigationController
,否则您还必须指定文件夹render 'navigation/dashboard'
您应该在视图中使用名为navigation
的名为dashboard
的文件夹。
在您的NavigationController中:
class NavigationController < ApplicationController
def dashboard
...
end
end
使用链接:<%= link_to 'Dashboard', dashboard_path %>
希望这能回答你的问题。
更新2
我没有看到您为sign_in创建的表单。我假设你正在使用设计。如果是这种情况,请确保您的登录表单发布到signin_path
。
答案 2 :(得分:0)
1 - 我不会放弃你的要求。但如果我正确地得到你的问题,那么
应该有3个资源(控制器)1 - 仪表板
2 - 交易
3 - 余额
并且控制器可能只有show action
2-为此您可以使用命名路由(http://guides.rubyonrails.org/routing.html)
例如:match 'Navigation' => 'Dashboard#show'
希望这会有所帮助
答案 3 :(得分:0)
当我实施信息中心时,我使用的是DashboardController
,而index
只是信息中心。我通常还会定义一个HomeController
,其中主页位于home#index
,还有关于页面,反馈页面......)。