2013-07-29 5 views
0

Когда я получаю ходатайство, я пытаюсь изменить дату на nil, но это не работает. Он не сохраняется в базе данных.Как обновить параметр в обновлении в рельсах

def update 
    @solicitacao = Solicitacao.find(params[:id]) 
    if @solicitacao.respondido == false 
    @solicitacao.attributes = {:data_resposta => nil} 
    end 
    if @solicitacao.update_attributes(params[:solicitacao]) 
    redirect_to(@solicitacao, :notice => 'Solicitacao atualizada.') 
    else 
    render :action => "edit" 
    end 
end 
+0

Я поговорил с моим другом, и он предложил мне сделать эту проверку в моделях ... ну, я добавлю в модель новую валидацию следующим образом: , если только self.respondido self.data_resposta = nil; end – Adley

ответ

0

Если вы хотите его изменить, вам необходимо его сохранить!

@solicitacao.save 

Это возвращает логическое значение, поэтому вы можете обрабатывать ошибку, если это происходит.

+0

На самом деле, ['update_attributes'] (http://apidock.com/rails/ActiveResource/Base/update_attributes) не только обновляет атрибуты, но также« запрашивает сохранение записи ». Вы подразумевали, что OP должен использовать 'save' вместо' update_attributes'? –

+0

вот так? http://pastie.org/8189840 ... все еще не работает, он не сохраняется в базе данных – Adley

0

Зная, что update_attributes возвращают ложь, если это не удается, я думаю, вы можете попробовать что-то вроде этого:

def update 
@solicitacao = Solicitacao.find(params[:id]) 
if @solicitacao.respondido == false && @solicitacao.update_attributes(:data_resposta => nil) 
    redirect_to(@solicitacao, :notice => 'Solicitacao atualizada.') 
else 
    render :action => "edit" 
end 
end 
0

Что вы делаете проверки поля в базу данных при вызове if @solicitacao.respondido == false, обновляя @solicitacao значение, а затем с помощью update_attributes для сохранения с параметром params[:solicitacao]. Следовательно, то, что вы изменили, не будет сохранено, потому что значение не указано в params[:solicitacao].

Необходимо изменить то, в чем вы нуждаетесь, в полевых условиях params[:solicitacao], смените поле data_resposta на nil, а затем оно должно работать.

С другой стороны, вы можете использовать model.errors, чтобы узнать, где все пошло не так. Я не думаю, что вы получите какую-либо ошибку, потому что на самом деле работает update_attributes. Это просто не то, что вы хотели сохранить.

+0

, но он меняет и сохраняет только atributte data_respota? или все формы? – Adley

+0

Должна быть вся форма, проверьте, какие у вас параметры [: solicitacao] есть –

+0

И я нахожусь в убытке, почему вы проверяете, что уже сохранено в базе данных? Вы не должны проверять 'params [: solicitacao] [: data_resposta]'? –