我想使用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"
和start
? end
和start
属性是否必要,或者我只能选择活动当天?
答案 0 :(得分:1)
我认为这更适合作为scope
:
scope(:place, ->(search) { where('place LIKE ?', "%#{search}%") })
然后你可以用其他查询链接它。
此代码应添加到您的Event
模型中。
然后你可以拨打Event.place('search-string').where(sun: true)
或者反过来,它可以链接。
您可以使用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。
这需要做出一些决定:
如果地点是预定义的(或可以访问),我会将日历渲染为:
<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:...
});
});
我不明白您对show
的关注或者您对日期选择卡的意思 - 请详细说明!
这次我试图把所有东西放在一个Gist中。 https://gist.github.com/davidwessman/7597e3eea4e71238d7f71a74928e64bd请检查一下是否有帮助!