如果您在未登录时转到Twitter.com,则会看到包含登录信息的营销页面。注册领域。
但是,如果您在登录时去那里,您将看到您的Twitter处理的活动流。
我知道在Rails中执行此操作的一种方法是为登录用户设置home/index
,并将public/index.html
用于营销网站。但Twitter没有使用public/index.html
,所以我想知道他们是如何做到的?
这只是一个简单的例子,它有一个根路由,但是if语句根据用户是否登录显示两个不同的页面?
或者是否还有一些其他更奇特的路由技巧可以用来做到这一点?
如果它只是一个if-statement
,那似乎有点hacky ......不是吗?
感谢。
答案 0 :(得分:3)
答案 1 :(得分:3)
默认情况下,处理特定路由的控制器方法会呈现一个具有相应名称的视图(主页/索引路由链接到主控制器和索引操作,后者又会在app / views / home文件夹中呈现视图index.html.erb )。
但是,在处理根请求的控制器方法中,您可以根据用户登录的事实简单地呈现不同的视图。
你可能会有这样的事情:
class HomeController
def index
...
if user_logged_in?
render "logged_in_user"
# else it will render the index view by default
end
end
端
在这种情况下,“logged_in_user”将是app / views / home文件夹中的不同视图(模板或html.erb文件)。
有关详细信息,请查看此处:Rails rendering guide
答案 2 :(得分:1)
它可以将某些未登录用户重定向到不同的控制器,用户会话的检查可以在before_filter中完成