0

我有一个在 Rails 中工作的 Fullcalendar。我还在事件表中添加了额外的字段和获取用户输入的模式。保存记录时,会自动将当前用户的user_id保存在事件表中。

我想让日历显示只有 current_user 的事件。

现在 calendar.js.coffee 文件有这个用于获取事件数据:

   eventSources: [{
  url: '/events',
}],

如何修复它,以便只显示 current_user 的事件数据?我是否在事件控制器中放置了一些代码?还是咖啡代码中的某些内容?

我应该在控制器的 json 部分添加一些选择代码吗?

  class EventsController < ApplicationController
  # GET /events
  # GET /events.json
  def index
    @events = Event.scoped
    @events = Event.between(params['start'], params['end']) if  (params['start'] && params['end'])
   respond_to do |format|
  format.html # index.html.erb
  format.json { render :json => @events }
  end
end

以下似乎不起作用:

      format.json { render :json => @events, :user_id => current_user.id }

谢谢!!!

4

1 回答 1

0

你是在正确的方式;)for_user在事件模型中使用一个范围(我命名它,如果需要我可以发布关于这个范围的代码)来检索特定用户的事件。

def index
  @events = Event.scoped
  @events = @events.between(params['start'], params['end']) if  (params['start'] && params['end'])
  @events = @events.for_user(params[:user_id]) if params[:user_id].present?
  respond_to do |format|
    format.html # index.html.erb
    format.json { render :json => @events }
  end
end

现在您需要将 a 传递params[:user_id]给 index 操作,这可能是current_user.id您的情况;)

eventSources: [{
  url: '/events',
  data: { user_id: current_user.id }
}],

警告:安全问题

这样做将使您能够将任何 user_id 放入 URL 并查看其他用户的数据。添加对 index 操作的验证,以确保您只能访问 current_user 的数据:

@events = @events.for_user(params[:user_id]) if params[:user_id].present? && params[:user_id] == current_user.id
于 2012-12-14T18:39:42.283 回答