No Rails, depois de usar achado com: select, meus objetos não salvar

votos
3

Executar algo como:

@users = User.find (: em primeiro lugar,: select => nome, sobrenome, salário) para @user em @users fazer @ user.salary = 100000 @ final user.save

Após esta olhando para cima na tabela Mysql, os usuários não são atualizados.

Publicado 17/09/2008 em 21:09
fonte usuário
Em outras línguas...                            


5 respostas

votos
18

não ActiveRecord não sei o id do objeto, a fim de salvar os dados. Portanto, incluir o campo id no: selecionar, como no exemplo abaixo:

@users = User.find (: em primeiro lugar,: select => "id, nome, sobrenome, salário")

Respondeu 17/09/2008 em 21:10
fonte usuário

votos
2

John Ruby é correto que você precisa incluir o ID do objeto na seleção.
Além disso, você raramente precisa usar a opção: select. Você pode com junta-se, ou se houver um problema de desempenho real com selecionar a linha inteira, mas isso não chegar a tanto.
E você realmente não precisa ser a criação todas essas variáveis a instância vars (@). @user no circuito pode ser um var local. Se você precisa de todos os usuários como @users você pode fazer:

@users = User.find (: all,: select => "id, nome, sobrenome, salário")
@ Users.each fazer | user |
  user.salary = 10.000
  user.save
fim

Você também pode querer olhar para update_all de ActiveRecord para mudanças simples. Mas note que este não chamar qualquer save retornos de chamada.

Respondeu 18/09/2008 em 17:21
fonte usuário

votos
0

Sei que esta é uma pergunta muito velho neste momento, mas a resposta correta, eu acredito é que todos os objetos retornados por: seleccionar são somente leitura.

Veja as Rails oficiais guia para consulta Active Record, seção 3.2:
http://guides.rubyonrails.org/active_record_querying.html

Curiosamente, eu não vejo isso documentado na API.

Respondeu 05/03/2010 em 02:05
fonte usuário

votos
0

Usando .Save! também vai lançar um erro se ele falhar para salvar.

Respondeu 17/09/2008 em 21:21
fonte usuário

votos
0

Tente usar .Update ou .update_attributes em vez disso: aqueles são projetados para edições (em oposição a .save, que é para a criação de novas linhas)

Respondeu 17/09/2008 em 21:19
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more