我的应用程序允许人们创建投资组合.我希望他们能够将他们的域名连接到他们的投资组合.
所以somedomain.com会显示/投资组合/ 12,someotherdomain.com会显示/投资组合/ 13等等.但我不想要重定向.我想让用户在浏览器网址中看到somedomain.com.
我怎么做?
好的,我找到了这个解决方案:
match "/" => "portfolio#show",:constraints => { :domain => "somedomain.com" },:defaults => { :id => '1' }
由于我没有很多自定义域,所以现在很好,但问题是 – 如何使这个动态的,从db读取域和id数据?
解决方法
首先,您应该向投资组合模型添加一个字段来保存用户的域.确保此字段是唯一的.在数据库中的字段中添加索引也是明智的.
第二,设置你的根路径到投资组合#show动作,就像你已经做到的那样,但没有约束.
然后,在PortfoliosController#show方法中,执行以下检查:
if params[:id] @portfolio = Portfolio.find(params[:id]) else @portfolio = Portfolio.find_by_domain(request.host) end
之后,唯一要做的就是确保你自己的域不会触发投资组合#show动作.这可以用您之前使用的约束完成,但现在与您自己的域.确保将此行放在routes.rb上方的投资组合#show操作的行上,因为优先级基于创建顺序.