全日历边栏:不同活动地点的不同日历



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

我阅读了费尔南多·佩拉莱斯(Fernando Perales(有用且写得很好的教程,该教程链接在 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]),它会起作用吗?
搜索方法将在事件模型中定义如下:

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

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

我的主要关注点之一是:由于 RESTful Events 资源的show操作对应于具有id=1的事件的 url/events/1,我想知道我是否会正确路由index.json.builder文件中的每个事件生成 url 的 html 格式,例如/events/1.html.事实上,作为公共轨道实践,我会在app/views/events/show.html.erb中插入通用事件的部分

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

你好!

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。

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

更新

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 请检查是否有帮助!

相关内容

  • 没有找到相关文章

最新更新