Как создать новый объект, используя данные из файла icalendar - PullRequest
0 голосов
/ 05 января 2019

У меня есть модель с именем event, атрибуты которой:

     string "name"
     string "location"
     string "lecturer"
     date "start_time"
     date "end_time"`

Я хочу взять данные из файла типа icalendar и создать экземпляры событий. Как мне это сделать? Я пытался сделать метод в events_controller.rb:

      def new_method

      @ievent_file = File.open("calendar2.ics")
      @ievents = Icalendar::Event.parse(@ievent_file)
      @ievent = @ievents.first
      @ievent = Event.new(name:@ievent.summary,location:@ievent.location, lecturer:@ievent.description, start_time:@ievent.dtstart, end_time:@ievent.dtend)

      end

Но тогда что мне с этим делать? Должен ли я вызвать эту функцию в поле зрения или, может быть, я должен взять этот код в метод с именем create, который выглядит следующим образом:

def create

@event = Event.new(event_params)

respond_to do |format|
  if @event.save
    format.html { redirect_to @event, notice: 'Event was successfully created.' }
    format.json { render :show, status: :created, location: @event }
  else
    format.html { render :new }
    format.json { render json: @event.errors, status: :unprocessable_entity }
  end
end
end

1 Ответ

0 голосов
/ 05 января 2019

Насколько я понимаю, у calendar2.ics много записей, если вы хотите просмотреть все события внутри calendar2.ics и сохранить их в своей таблице событий (импортировать файл ics в таблицу событий)

ниже приведены примеры шагов, внутри вашего файла маршрутов создайте один метод

resources :events do
  collection {
    get  :transfer_data_from_ics
  }
end

внутри вашего events_controller вы создаете 2 метода

def transfer_data_from_ics
  # get data from ics
    @ievent_file = File.open("calendar2.ics")
    @ievents = Icalendar::Event.parse(@ievent_file)      
  # loop through
    @ievents.each do |i_event|
      Event.create(
        name: i_event.summary,
        location: i_event.location, 
        lecturer: i_event.description, 
        start_time: i_event.dtstart, 
        end_time: i_event.dtend)
    end
  # route back to events list
    redirect_to events_path
end

чтобы вызвать вызываемый метод, вы можете создать меню / кнопку с link_to следующим образом:

<%= link_to "Transfer data", transfer_data_from_ics_events_path %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...