Rails 4 x simple_calendar gem:点击日历单元格创建新记录

Rails 4 x simple_calendar gem: create new record on click in calendar cell

我有一个 Rails 4 应用,有一个 Post 模型和一个 Calendar 模型:一个 post belongs_to 一个 calendar 和一个 calendar has_many posts.

Post 模型具有自定义 :date 属性。

帖子以两种不同的视图显示:

我想要实现的是,让用户只需单击 Calendars#Calendar_view 视图中的日历单元格即可创建新的 post,也就是说去Posts#New 视图,其中新 post 的 :date 字段将预先填充单元格中的日期。

我在 calendar_view 视图中使用 simple_calendar gem 来显示 posts,代码如下:

<%= month_calendar events: @posts do |date,posts| %>
  <%= content_tag :div, class: "new-event", data: {date: date} do %>
    <%= date.strftime('%e') %>
    <% posts.each do |post| %>
      <div class="single_event">
        <%= link_to post.subject, post_path(post) %>
      </div>
    <% end %>
  <% end %>
<% end %>

我在 posts.coffee 文件中使用此代码来检测 on click 事件并从单元格中获取日期:

$(".new-event").on "click", (e) ->
  date = $(this).data("date")
  window.location = "/posts/new?post[date]=#{date}"

然后,在我的 Posts#New 操作中,我使用 @post = @calendar.posts.new(post_params) 从表单中的单元格预加载日期。

问题是:当我在 calendar_view 视图中单击一个单元格时,没有任何反应。

我检查了Chrome中的控制台,没有出现错误。

知道这里出了什么问题,或者至少我应该从哪里开始调试它?

看看这个例子:https://github.com/excid3/clickable-simple_calendar

您可以使用此 JS 来触发重定向。我错了位置重定向,这就是你想要的:

jQuery ->
  $(".calendar-day").on "click", ->
    date = $(this).data("date")
    location.href = "/meetings/new?meeting[start_time]=#{date}"

这一切都与日历的 HTML 挂钩:

<%= month_calendar do |day| %>
  <%= content_tag :div, class: "calendar-day", data: {date: day} do %>
    <%= day %>
    <%# Whatever else you want in here %>
  <% end %>
<% end %>

并且使用 strong_params 使用参数预填充它的 Meetings 新操作有一点变化(如果它丢失也不会抛出错误)。

这应该可以解决问题![​​=13=]