Ruby on rails fullcalendar rails:针对不同事件和地点的不同日历

Ruby on rails fullcalendar rails:针对不同事件和地点的不同日历,ruby-on-rails,json,fullcalendar,Ruby On Rails,Json,Fullcalendar,我想使用基于Adam Shaw的jQuery fullcalendar插件的gem“fullcalendar rails”来组织我的应用程序的事件 我阅读了Fernando Perales写的有用且写得很好的文章,该文章链接在readme.md文件中。 由于我想在我的rails 5应用程序中使用fullcalendar-rails,而且我是json新手,因此我想问一些问题 我的事件模型有一个位置属性,即事件举行的位置。 我的目标是为不同的地方制定不同的日历,因为每个地方都有自己的活动 我的想法是

我想使用基于Adam Shaw的jQuery fullcalendar插件的gem“fullcalendar rails”来组织我的应用程序的事件

我阅读了Fernando Perales写的有用且写得很好的文章,该文章链接在readme.md文件中。 由于我想在我的
rails 5
应用程序中使用
fullcalendar-rails
,而且我是
json
新手,因此我想问一些问题

我的
事件
模型有一个
位置
属性,即事件举行的位置。 我的目标是为不同的地方制定不同的日历,因为每个地方都有自己的活动

我的想法是在事件索引页面中插入以下表单:

<%= 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 %>
如果在
事件
模型中定义了
搜索
方法后,我将
index.json.builder
文件使用的实例变量
@events
定义为
@events=Event.search(params[:search])
,它会起作用吗
搜索方法将在事件模型中定义如下:

def index
  if params[:search]
    @events = Event.search(params[:search])
  else
    @events = nil
  end
end
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(如
/events/1.html
)的html格式正确路由我。事实上,按照common rails的实践,我会在
app/views/events/show.html.erb

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

您好! 1.查询 我认为这更适合作为
范围

  scope(:place, ->(search) { where('place LIKE ?', "%#{search}%") })
然后您可以将其与其他查询等链接起来

更新: 此代码应添加到您的
事件
-模型中。 然后可以调用
Event.place('search-string')。where(sun:true)
或者反过来,它是可链接的

2.控制器 您可以使用
索引
操作,即

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
将所有事件以类似
place1
的位置呈现为json

更新
format.html
允许呈现html和json

3.看法 这需要一些决定:

  • 您的位置是预定义的还是用户输入的
  • 用户如何搜索位置
  • 如果位置是预定义的(或可以访问),我会将日历呈现为:

    <div class="fullcalendar" data-place="<%= 'place1' %>">
    </div>
    
    4.休息 我不理解您对
    show
    的关注,也不理解您所说的日期选取者是什么意思-请详细说明


    更新 这次我试着把所有的东西都归纳成一个要点。 请检查它是否有用

    你好!! 1.查询 我认为这更适合作为
    范围

      scope(:place, ->(search) { where('place LIKE ?', "%#{search}%") })
    
    然后您可以将其与其他查询等链接起来

    更新: 此代码应添加到您的
    事件
    -模型中。 然后可以调用
    Event.place('search-string')。where(sun:true)
    或者反过来,它是可链接的

    2.控制器 您可以使用
    索引
    操作,即

    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
    将所有事件以类似
    place1
    的位置呈现为json

    更新
    format.html
    允许呈现html和json

    3.看法 这需要一些决定:

  • 您的位置是预定义的还是用户输入的
  • 用户如何搜索位置
  • 如果位置是预定义的(或可以访问),我会将日历呈现为:

    <div class="fullcalendar" data-place="<%= 'place1' %>">
    </div>
    
    4.休息 我不理解您对
    show
    的关注,也不理解您所说的日期选取者是什么意思-请详细说明


    更新 这次我试着把所有的东西都归纳成一个要点。
    请检查它是否有用

    嗨,谢谢你的回复。我编辑了我的原始消息。我最初的目的是让用户有机会通过事件索引页面中的表单搜索他们所在城市的事件。因此,此页面最初不会显示事件。当用户搜索一个地方时,将定义
    @events
    ,并在视图中呈现fullcalendar。我有一个问题:你会把
    范围
    放在你的查询部分(第1部分)的哪里?我对范围不太熟悉。另外,在控制器中,什么对应于
    format.html
    ?使用
    respond_to
    format
    意味着如果用户试图访问
    html
    格式或
    json
    格式,您可以在控制器中执行不同的代码。文档建议使用
    fullcalendar rails
    json格式。你认为html的替代方案是什么?另外:您将
    范围
    代码放在哪里?html格式仅用于呈现普通页面,与fullcalendar无关。我在回答中的“范围”下加了一个,将它添加到模型中。谢谢,我会通读你的要点,我需要时间来理解