我正在尝试为我的应用用户创建一个链接,用于订阅他们的帐户日历。我有一个链接,我在rails中生成calendar_publisher_lists_url(:format =>:ics,:only_path => false,:protocol =>“web cal”) 它会生成像webcal://mywebsite.com/calendar.ics这样的链接 但是这只有在用户登录时才有效。我需要链接在日历自动更新时工作,即使用户没有登录。因此我需要生成一个如下所示的链接: webcal://123@mywebsite.com/calendar.ics其中'123'是用户的身份验证令牌。 如何生成此网址?
答案 0 :(得分:1)
将其作为属性放在URL上有什么问题?
calendar_publisher_lists_url(:format => :ics, :only_path => false,:protocol => "webcal", :authentication_token => current_user.authentication_token)
webcal://mywebsite.com/calendar.ics?authentication_token=123
我的意思是除了安全问题......
答案 1 :(得分:0)
如果安全性不是问题,您可以更改路由以添加ID。
match '/calendar/:id/calendar_feed', to: 'calendar#calendar_feed', :as => 'calendar_feed_path'
然后在你的控制器中输入
def calendar_feed
@user=User.find(params[:id])
respond_to do |format|
format.ics
end
end
然后添加一个视图模板,根据您的逻辑调整以满足您的需求(此代码来自我的一个项目):
BEGIN:VCALENDAR
METHOD:PUBLISH
VERSION:2.0
PRODID:-//UserCalendar//EN
X-WR-CALNAME:Name Of Website
CALSCALE:GERGORIAN
<% @users.each do |user| %> #change logic to fit your needs
<% user.day_offs.each do |day_off| %>
BEGIN:VEVENT
DTSTAMP:<%=Time.now.strftime("%Y%m%dT%H%M%SZ")%>
UID:<%=day_off.id%>
SUMMARY:<%= day_off.user.name.titleize %> | <%= day_off.do_type %>
DTSTART:<%= day_off.start_date.strftime("%Y%m%d") %>
<% end_day=day_off.end_date + 1.day %>
DTEND:<%= end_day.strftime("%Y%m%d") %>
END:VEVENT
<% end %>
<% end %>
END:VCALENDAR
然后Feed链接
<%= link_to("Subscribe to Calendar", "webcal://www.nameofwebsite.com/calendar_feed/#{current_user.user_id}/calendar_feed.ics" ) %>