fullcalendar-rails:不同事件的不同日历

时间:2017-07-28 08:44:09

标签: ruby-on-rails json fullcalendar

我想使用gem' fullcalendar-rails',基于Adam Shaw的jQuery FullCalendar插件,来组织我的应用程序事件。

我阅读了Fernando Perales撰写的有用且写得很好的tutorial,它在readme.md文件中链接。 由于我希望fullcalendar-rails用于我的Rails 5应用,而我是json的新用户,我想问一些问题。

我的Event模型具有place属性,该属性是举办活动的地方。 我的目标是为不同的地方设置不同的日历,因为每个地方都有自己的活动。

我的想法是在事件索引页面中插入以下表单:

<%= form_tag(events_path, method: :get, id: "search-event-place") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search a place" %>
<%= submit_tag "Search", class: "btn btn-primary" %>
<% end %>

<% if @events.present? %>
  <div id="calendar"></div>
<% end %>

通过这种方式,用户可以查找地点并获取在该地点举行的所有活动,并以fullcalendar进行组织。因此,例如,如果用户在伦敦搜索某个活动,他将获得一个包含伦敦活动的日历...

事件控制器中的索引操作如下:

def index
  if params[:search]
    @events = Event.search(params[:search])
  else
    @events = nil
  end
end

如果在search模型中定义Event方法后,我将@events文件使用的实例变量index.json.builder定义为{{1} }?
搜索方法将在事件模型中定义如下:

@events = Event.search(params[:search])

RESTful Events资源的索引页面是定义def self.search(search) where("place ILIKE ?", "#{search}") end 的正确位置吗? 如果我转到@events或:localhost:3000/events.json,我会看到哪些事件?

我主要担心的一个问题是:由于RESTful事件资源的localhost:3000/events操作对应于show事件的网址/events/1,我想知道我是否会被路由正确使用id=1文件中的每个事件生成一个网址,例如index.json.builder的html格式。事实上,作为常见的轨道练习,我会在/events/1.html

中插入通用事件的部分内容

最后:我的用户使用jQuery日期选择器选择事件的日期,因此属性app/views/events/show.html.erb将保存为格式为event_date的字符串:如何设置json "yy-mm-dd"startendstart属性是否必要,或者我只能选择活动当天?

1 个答案:

答案 0 :(得分:1)

您好!

1。查询

我认为这更适合作为scope

  scope(:place, ->(search) { where('place LIKE ?', "%#{search}%") })

然后你可以用其他查询链接它。

更新

此代码应添加到您的Event模型中。 然后你可以拨打Event.place('search-string').where(sun: true)或者反过来,它可以链接。

2。控制器

您可以使用index操作,即

def index
  respond_to do |format|
    format.html
    format.json do
      @events = set_events
    end
  end
end

def set_events
  if params[:place].present?
    Event.place(params[:place])
  else
    Event.all
  end
end

如果您有events#index路线,则可以使用附加信息.json进行访问,并查看index.json.jbuilder中呈现的json。

E.g。如果您访问/events,则会看到index.html.erb/events.json?place=place1会将所有事件呈现为place1,如json。

更新

format.html允许渲染html和json。

3。图

这需要做出一些决定:

  1. 您的地点是预定义的还是用户输入的?
  2. 用户如何搜索地点?
  3. 如果地点是预定义的(或可以访问),我会将日历渲染为:

    <div class="fullcalendar" data-place="<%= 'place1' %>">
    </div>
    

    JS:

    const calendars = document.getElementsByClass('fullcalendar');
    Array.from(calendars).forEach(function(calendar) {
      const place = calendar.dataset.place;
      calendar.fullCalendar({
        eventSources: [{ url: '/events.json?place=' + place }],
        other_options:...
      });
    });
    

    4。其余

    我不明白您对show的关注或者您对日期选择卡的意思 - 请详细说明!

    更新

    这次我试图把所有东西放在一个Gist中。 https://gist.github.com/davidwessman/7597e3eea4e71238d7f71a74928e64bd请检查一下是否有帮助!