Criando um Campo de Texto Não Editável no Rails
Ruby on Rails 11/03/08 às 16:01Ontem eu estava trabalhando em um pet project que provavelmente nunca verá a luz do dia, e me deparei com a necessidade de criar um campo de texto não editável. Como a minha memória não é muito boa, se é que eu já vi como se faz isso algum dia, eu não consegui me lembrar de como proceder. Sendo assim, eu consultei a documentação da API do Rails, mas não fui bem sucedido, portanto pesquisei em alguns sites logo em seguida, e, após um certo tempo, descobri o que eu queria. Como forma de reforçar isto na minha memória, e também para tentar ajudar os próximos que fizerem a mesma busca no Google, eu estou postando agora como fazer isso.
No meu caso específico, este campo de texto que não poderia ser editado estaria em um típico formulário de preferências de um usuário, onde ele poderia editar coisas como senha e email, mas não poderia editar o campo de login. É claro que poderíamos simplesmente deixar este campo ser editado no formulário, e quando este fosse enviado, simplesmente ignoraríamos qualquer alteração no login, além de gerar uma mensagem informando tal comportamento. No entanto, um dos princípios de uma boa interface é não criar situações que possibilitem erros. Se bem que seguindo essa linha de raciocínio eu nem deveria colocar o campo login no formulário, já que ele não pode ser editado mesmo, mas se fosse assim não teríamos este post, então vamos ignorar este pequeno detalhe.
Abaixo está o código do formulário mencionado, sendo que a parte relevante, pelo menos no escopo deste post, é a linha <%= f.text_field :login, :disabled => true %>, que, como vocês devem imaginar, desabilita a edição deste campo do formulário.
P.S.1: É evidente que um formulário de preferências de verdade teria 3 campos para senhas(senha atual, nova senha e confirmação da nova senha), mas pra simplificar o exemplo, e focar apenas no que interessa neste post, eu reduzi o formulário.
P.S.2: Ninguém pode negar o meu enorme talento para enrolar, já que poderia resumir o conteúdo deste post inteiro na seguinte frase:
Para criar campos de texto não editáveis no Rails basta incluir :disabled => true como argumento do helper text_field.
Objetividade é para os fracos! :)

Uma outra opção, seria exibir o login em texto normal [], assim o usuário veria o login dele e sabe que não pode editar (e não causa confusão com noobies - “Mas eu não consigo editar esse campo! Esse prog tá com problema)
No caso de precisar do login para a action do form, só colocar dentro de um hidden.
Seguindo a lógica do post, enrrolei bastante no comentário tb [hahá]
[Curti seu blog cara, parabéns!]
Olá, Diogo.
Que bom que você gostou do blog. :)
Quanto a sua sugestão de exibir o campo de texto com o login normalmente, apenas impedindo a edição, eu acho que isso cria uma certa confusão, já que por padrão o usuário vai pensar que aquele campo, por estar sendo exibido como todos os outros, pode ser editado também. E é justamente isso que devemos evitar.A aplicação deve ser comportar exatamente como o usuário espera que ela se comporte, assim ele não terá que aprender a usar o sistema.
Quanto ao que você disse sobre o hidden, essa até é uma maneira de passar um valor para a action, mas acho que nesse caso seria melhor colocar esse valor na sessão, que é o que eu faço, aliás.
E que bom saber que não sou o único que enrola ao escrever. E, por falar nisso, continuo em forma praticando essa milenar arte aqui também nos comentários, vide o tamanho desta resposta.
Abraços.
dfgdfgdf