在日历中过滤ruby on rails应用程序中的事件

时间:2013-11-25 15:04:34

标签: javascript ruby-on-rails ruby ruby-on-rails-3 fullcalendar

我已经使用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  

我尝试了所有可能的组合,但无法获得结果。请帮帮我。

由于

2 个答案:

答案 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] { '&#8212;' 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!');
        },
    },