【问题标题】:fullcalendar-rails: different calendars for different events placesfullcalendar-rails:不同活动地点的不同日历
【发布时间】:2017-08-14 04:45:32
【问题描述】:

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

我阅读了 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 %>

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

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

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

如果在Event 模型中定义了search 方法后,我将index.json.builder 文件使用的实例变量@events 定义为@events = Event.search(params[:search]),它会起作用吗?
搜索方法将在 Event 模型中定义如下:

def self.search(search)
  where("place ILIKE ?", "#{search}")
end

RESTful 事件资源的索引页面是否是定义@events 的正确位置? 如果我去:localhost:3000/events.json 或去:localhost:3000/events,我会看到什么活动?

我主要关心的一个问题是:由于 RESTful 事件资源的 show 操作对应于带有 id=1 的事件的 url /events/1,我想知道我是否会为每个事件正确路由index.json.builder 文件是 html 格式,它生成一个 url,例如 /events/1.html。事实上,作为常见的 Rails 实践,我会在 app/views/events/show.html.erb 中插入通用事件的部分内容

最后:我的用户使用 jQuery 日期选择器选择事件的日期,因此属性 event_date 将保存为格式为 "yy-mm-dd" 的字符串:我如何设置 json startendstartend 属性是必需的,还是我可以只选择活动的日期?

【问题讨论】:

    标签: ruby-on-rails json fullcalendar


    【解决方案1】:

    你好!

    1。查询

    我认为这更适合作为scope

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

    然后你可以将它与其他查询等链接起来。

    更新:

    此代码应添加到您的Event-model。 然后你可以调用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。

    例如如果您访问/events,您将看到index.html.erb/events.json?place=place1 会将具有place1 之类的位置的所有事件呈现为json。

    更新

    format.html 允许渲染 html 和 json。

    3。查看

    这需要一些决定:

    1. 您的地点是预定义的还是用户输入的?
    2. 用户如何搜索地点?

    如果这些地点是预定义的(或可以访问),我会将日历呈现为:

    <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 看看有没有帮助!

    【讨论】:

    • 您好,感谢您的回复。我编辑了我的原始消息。我最初的意图是让用户有机会在活动索引页面中使用表单搜索他们所在城市的活动。所以这个页面最初不会显示事件。当用户搜索地点时,@events 将被定义并在视图中呈现完整日历。我有一个问题:您会将scope 放在查询部分(第 1 部分)的什么位置?我对范围不太熟悉。另外,在控制器中,format.html 对应的是什么?
    • 使用respond_toformat意味着如果用户尝试访问html格式或json格式,您可以在控制器中执行不同的代码。
    • 文档建议fullcalendar-rails json 格式。你会建议什么作为 html 替代品?另外:你会把scope代码放在哪里?
    • html-format 仅用于渲染普通页面,与全日历无关。我在答案的范围内添加了它 - 将其添加到模型中。
    • 谢谢,我会通读你的要点,我需要时间。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2019-05-05
    • 2021-06-19
    • 2021-04-02
    • 2016-02-12
    相关资源
    最近更新 更多