我正在使用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