我已经使用fullcalendar assets
gem来列出日历中的所有事件,我试图根据我的需要修改日历,但对于这种情况我感到困惑。
我用了https://github.com/bokmann/rails3_fullcalendar
情境: 我必须过滤掉日历中特定工作人员的所有约会。所以在我的约会中,控制器以这种方式列出了所有约会。
@appointments = @client.appointments
它列出了客户的所有约会,所以现在我再次根据下拉按钮的选择过滤出约会,我列出了客户的所有工作人员。因此,根据所选的工人,它将显示该特定选定工人的约会。
代码已尝试
1。 Rails方式
首先,我尝试使用rails方式,我需要将工作的id
从下拉菜单传递给控制器,我已经使用了下拉代码:
<%= form_tag appointments_path do %>
<%= select_tag(:worker_id, options_from_collection_for_select(@client.workers, :id, :alias), :include_blank =>true)%>
<%=submit_tag "Display"%>
<% end %>
但是我不知道在控制器中传递什么来获取记录。
2。 JS方式
<%= select_tag(:worker_id, options_from_collection_for_select(@client.workers, :id, :alias), :include_blank =>true),:onchange => 'a(this.value)'%>
calendar.js
function a(pointer){
var intWorkerId = pointer;
alert(intWorkerId);
$.ajax({
url:'/appointments',
dataType: "json",
data:({
id:intWorkerId
}),
type:'get',
success:function(result){
alert(result);
$('#content').html(result);
console.log(1);
}
});
}
我正在控制器中获取一个工作者的ID,因为我试图打印该值并尝试打印该ID的值,这是正确的但我不知道如何继续。
Appointment.rb
def as_json(options = {})
{
:id => self.id,
:title => self.title,
:description => self.description || "",
:start => appointment_start_time.rfc822,
:end => appointment_end_time.rfc822,
:allDay => self.all_day,
:recurring => false,
:url => Rails.application.routes.url_helpers.appointment_path(id)
#:color => "red"
}
Appointment_controller.rb
if params[:id]
#@appointments = @client.workers.params[:id].appointments
#p "*********id values****#{params[:id]}"
#worker = Worker.find(params[:id])
#p"***** #{worker.alias}"
#@appointments = worker.appointments
#p "******* #{@appointments.count}"
p "*******hello id is here*******"
else
@appointments = "hello"
p "*******hello id is not here*******"
end
我尝试了所有可能的组合,但无法获得结果。请帮帮我。
由于
答案 0 :(得分:1)
如果约会是工人的关联,你可以得到这样的客户工作人员:
@worker = @client.workers.find(params[:id])
获得该工作人员的约会:
@appointments = @worker.appointments
这假设您在Appointment课程中有:
class Appointment < ActiveRecord::Base
belongs_to :worker
end
你的工人:
class Worker < ActiveRecord::Base
has_many :appointments
end
在你的控制器中你还需要获得@client。你现在怎么样?是current_user
吗?如果不是,您需要在表单中传递客户端ID:
<%= form_tag appointments_path do %>
<%= select_tag(:worker_id, options_from_collection_for_select(@client.workers, :id, :alias), :include_blank =>true)%>
<%= hidden_field_tag :client_id, session[:client_id] # or wherever you store this
<%=submit_tag "Display"%>
<% end %>
现在您可以在控制器中找到客户端:
@client = Client.find(params[:client_id])
另请注意,在您提供的示例表单中,您将工作人员的ID作为:worker_id
传递,因此您需要在控制器中使用params[:worker_id]
。您提供的JS示例使用:id
,因此我假设您正在使用的方法,因为您在控制器示例中使用了params [:id]。
最后,将约会作为JSON数组返回:
class AppointmentsController < ApplicationController
def index
if params[:id]
@appointments = @client.workers.find(params[:id])
render json: @appointments.map(&:as_json)
else
@appointments = "hello"
p "*******hello id is not here*******"
end
答案 1 :(得分:0)
我在同一re-rendering
js file
日历找到了解决方案
function RenderCalendar(eId) {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'agendaWeek',
aspectRatio: 1.5,
slotMinutes: 30,
slotEventOverlap: true,
editable: true,
timeFormat: 'h:mm t{ - h:mm t} ',
titleFormat: {
month: 'MMMM yyyy', // September 2009
week: "| MMM d[ yyyy] { '—' MMM d | yyyy}", // |Sep 7 - Sep 13|, 2009
day: 'dddd, MMM d, yyyy' // Tuesday, Sep 8, 2009
},
events: {
url: '/appointments',
cache: true,
type: 'GET',
data: {
id: eId
},
error: function () {
alert('there was an error while fetching events!');
},
},