我正在编写rails应用程序,需要为移动用户向普通的Web浏览器用户提供不同的链接。例如,如果用户在移动设备上,我想显示:
<a href="instagram://user?username=<%= photo.author %>" target="_blank" class="btn btn-info btn-block"><i class="fa fa-instagram"></i> Captured by <%= photo.author %></a>
如果用户在浏览器上,我想显示:
<a href="http://instagram.com/<%= photo.author %>" target="_blank" class="btn btn-info btn-block"><i class="fa fa-instagram"></i> Captured by <%= photo.author %></a>
最好的方法是什么?感谢
答案 0 :(得分:7)
浏览器数据以user_agent
对象的形式出现:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
helper_method :mobile?
private
def mobile? # has to be in here because it has access to "request"
request.user_agent =~ /\b(Android|iPhone|iPad|Windows Phone|Opera Mobi|Kindle|BackBerry|PlayBook)\b/i
end
end
这样您就可以在视图中使用以下内容:
#app/views/controller/view.html.erb
<% if mobile? %>
... do something for mobile
<% else %>
... do something else
<% end %>
老实说,我不明白为什么人们会对他们的移动界面进行硬编码工作。如果您正确使用CSS media queries,则不应该对文件有任何问题,尽管您的情况似乎确实需要服务器端条件。
答案 1 :(得分:0)
我猜你要实现deep linking。为此,我建议你使用deeplink.me。但是如果你想以rails方式进行,那么就有一个名为browser
的宝石。以下代码将帮助您进行设置。
<强>的Gemfile:强>
Get-ADGroup -Anr
然后在你的
application_controller.rb:
gem 'browser'
最后在你的观点中,你可以这样做:
class ApplicationController < ActionController::Base
before_filter :get_browser
def get_browser
@browser = Browser.new(:ua => request.user_agent)
end
end
答案 2 :(得分:-3)
我建议您使用像Bootstrap或Foundation这样的前端工作。这些框架允许您定位到移动视图和桌面视图。