Могу ли я сохранить данные более одного раза для одного запроса в рельсах? - PullRequest
2 голосов
/ 03 августа 2011

Существует вызов модели, который содержит следующие атрибуты

start_at, end_at, details, trainer

Это мой обычный метод создания, который сгенерировал мою команду скаффолда

  def create
@event = Event.new(params[:event])

respond_to do |format|
  if @event.save
    format.html { redirect_to(@event, :notice => 'Event was successfully created.') }
    format.xml  { render :xml => @event, :status => :created, :location => @event }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @event.errors, :status => :unprocessable_entity }
  end
 end
end

и мне нужно изменить это следующим образом, когда конкретный объект события имеет промежуток между stat_at и end_at больше 6, мне нужно сохранить это событие как два события.Первое событие будет начинаться с первоначальной даты начала, а дата окончания должна быть средней датой события, а другие данные совпадают.Но во втором случае это должна быть начальная дата, поскольку средняя дата и конечная дата должны иметь первоначальную конечную дату.Кто-нибудь может объяснить, как я мог это сделать ???

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

После строки if @ event.save вы можете создать еще одну запись о событии, подобную этой

Обратите внимание, что этот код не проверен.

if (@event.end_at - @event.start_at) > 6
  event2 = Event.new
  event2.start_at = something
  event2.end_at = anotherthing
  event2.save
end
0 голосов
/ 03 августа 2011

Поскольку вы собираетесь выполнять некоторую логику, вы можете написать метод для выполнения вашей логики и вызвать этот метод из контроллера.Лучше сохранить метод в модели событий, чтобы соответствовать хорошей практике Fat Model и Lean Controller.

def self.create_event(ev_params)
  status = false
  if event.end_dat - event.stat_dat >6
    # create two events
    event1 = Event.new(ev_params)
    mid_date = event1.stat_at + ((event.end_dat - event.stat_dat)/2).days
    event1.end_at = mid_date
    event2 = Event.new(ev_params)
    event2.stat_at = mid_date
    status = event1.save'
    status = event=2.save'
  else
    status = Event.create(ev_params)
  end
  status      
end

И вызвать этот метод из контроллера Event.create_event в controller @ event.save.

это не проверенный код, но я надеюсь, что вы можете легко получить приведенный выше код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...