Rails 3 сохраняет запись вопроса - PullRequest
0 голосов
/ 27 марта 2011

Я работал с Rails 3.0.5 и Ruby 1.9.2 и заметил, что новая запись не сохраняется или недоступна для использования мгновенно.

Например

def create    
    @some_record = Pool.new(params[:pool])  
      @some_record.users.push(current_user)
    if params[:commit] == "Add More"          
      @some_record.save        
      @some_record.do_something
    elsif params[:commit] == "Save"
      do_something_else(params)
    elsif params[:commit] == 'Cancel'
      redirect_to user_url(current_user)
    end    
 redirect_to some_other_url(current_user)
end

Поэтому, когда я сохраняю запись и вызываю some_record.do_something, сохраненный объект не доступен мгновенно.current_user.some_records не содержит вновь добавленную запись, но current_user.some_records.all отображает вновь сохраненную запись.Однако на консоли я могу просмотреть вновь созданную запись с помощью current_user.some_records.

Я уверен, что мне не хватает чего-то фундаментального в Rails 3. Я также пробовал то же самое с current_user.some_records.build(params[:some_record], и у меня естьта же проблема.Сохраняет ли Rails 3 объект мгновенно или существует какая-то отложенная запись / сохранение, потому что та же проблема не возникает с Rails 3.0.3.

Также я не использую плагин аутентификации, такой как authlogic / devise, и япросто сохраните объект current_user в сеансе.Я не уверен, что я делаю неправильно.Был бы признателен за любую помощь?

Это также связь многих со многими между some_record и пользователями

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Структура модели не ясна из вашего вопроса, но давайте предположим, что current_user belongs_to some_records Для принудительного чтения базы данных попробуйте это:

current_user.some_records(true)

По умолчанию forcereload = false, чтобы переопределить это, вы должны передать true

1 голос
/ 27 марта 2011
current_user.some_records 

не содержит вновь добавленной записи, поскольку вы не сохранили операцию после назначения @some_record.users.push(current_user).Все, что вам нужно сделать, это добавить .save после назначения, и оно должно работать.

...