Duvida sobre os models no Rails  XML
Índice dos Fóruns » Ruby & Ruby on Rails
Autor Mensagem
danielbussade
JavaEvangelist

Membro desde: 13/09/2007 09:26:21
Mensagens: 415
Localização: Itaperuna -RJ
Offline

Olá programo em java há 2 anos, e há duas semanas atrás comecei a programar em Ruby, comprei um livro de Ruby e um de Ruby on Rails e comecei a estudar, estou ajudando bem produtivo tanto o framework quanto a linguagem, mas estou com uma dúvida e nao sei como resolver é a seguinte:

Tenho o model User gerado pelo scaffold do rails ele herda de ActiveRecord::Base definida desta maneira



E a migration esta assim


E o metodo create do controller esta assim


O que eu não consigo entender e porque que diferente do java os atributos do Objeto User nao esta no User.rb e somente no Migration, ou seja como o rails consegue injetar os dados que estão vindo da view no @user, sendo que ele nao tem estar propriedades.
E neste caso por exemplo tenho o cadastro de Usuario com
login
senha
ativo
O ativo e apenas um flag para saber se o usuario pode entrar no sistema, queria que sempre fosse criado como true , como forçar o rails a fazer isso tentei assim no controller mas nao deu certo:


Ele me lançou um erro Wrong arguments 3 to 1, dizendo que so tem um argumento e estou passando três.

Como resolver este problema?

Orbigado


This message was edited 2 times. Last update was at 23/03/2009 14:11:48


When you steal from one author, is called plagiarism, when you steal from many is called research.

[WWW] [MSN]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

danielbussade wrote:Ele me lançou um erro Wrong arguments 3 to 1, dizendo que so tem um argumento e estou passando três.

Você precisa passar como parâmetro um hash com pares :atributo => valor.
Consulte a documentação de ActiveRecord::Base: http://api.rubyonrails.org/

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

danielbussade
JavaEvangelist

Membro desde: 13/09/2007 09:26:21
Mensagens: 415
Localização: Itaperuna -RJ
Offline

Mas como recuperar os parametros que o usario digitou individualmente ?

Desse jeito:

params[:user] ele vem todos os campos eu quero por exemplo so o login como faço?

When you steal from one author, is called plagiarism, when you steal from many is called research.

[WWW] [MSN]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Já tentou usar params[:campo]?

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

danielbussade
JavaEvangelist

Membro desde: 13/09/2007 09:26:21
Mensagens: 415
Localização: Itaperuna -RJ
Offline

Já ele vem vazio!

When you steal from one author, is called plagiarism, when you steal from many is called research.

[WWW] [MSN]
GutomCosta
Thread.start()
[Avatar]

Membro desde: 08/08/2005 20:20:59
Mensagens: 32
Localização: Rio de Janeiro
Offline

tente utilizar param[:user][:nomecampo].

Luiz Costa
www.sagadoprogramador.com.br
[WWW] [MSN]
flavi0
JavaTeenager

Membro desde: 16/09/2006 10:01:18
Mensagens: 150
Offline

tente utilizar param[:user][:nomecampo].

é para funcionar

invez de tentar forçar, por que você não coloca como um valor default no banco de dados?

flavi0
JavaTeenager

Membro desde: 16/09/2006 10:01:18
Mensagens: 150
Offline

deixa eu completar meu post anterior
o param[:user][:nomedocampo] vai consegui pegar o valor no controlador, mas ele não vai conseguir inserir por causa do

"Wrong arguments 3 to 1" que na verdade quer dizer, 3 parametros para 1
entende? tem mais parametros do que ele espera

o que você pode fazer, usar o default como eu disse no outro post, ou criar um novo método de inserção dentro do modelo
é isso ai

abraços
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

flavi0 wrote:deixa eu completar meu post anterior
o param[:user][:nomedocampo] vai consegui pegar o valor no controlador, mas ele não vai conseguir inserir por causa do

"Wrong arguments 3 to 1" que na verdade quer dizer, 3 parametros para 1
entende? tem mais parametros do que ele espera

o que você pode fazer, usar o default como eu disse no outro post, ou criar um novo método de inserção dentro do modelo
é isso ai

abraços

Conforme falei em meu primeiro post nesse tópico, o método new recebe apenas um parâmetro, que é um hash com pares :atributo => valor.
Novamente, ver a documentação. O link está logo acima.

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

danielbussade
JavaEvangelist

Membro desde: 13/09/2007 09:26:21
Mensagens: 415
Localização: Itaperuna -RJ
Offline

flavi0 wrote:deixa eu completar meu post anterior
o param[:user][:nomedocampo] vai consegui pegar o valor no controlador, mas ele não vai conseguir inserir por causa do

"Wrong arguments 3 to 1" que na verdade quer dizer, 3 parametros para 1
entende? tem mais parametros do que ele espera

o que você pode fazer, usar o default como eu disse no outro post, ou criar um novo método de inserção dentro do modelo
é isso ai

abraços


Valeu flavio pelo resposta, resolvi colocando o default no banco. Mas o [:user][:nomedocampo] funciona sim. Agora uma coisa que acho muito estranho no rails é isso kra dos atributos do usuario nao pertencer a usuario que herda de ActiveRecord::Base e sim estar apenas nas migrations.
É desse jeito mesmo que o pessoal programa ou se faz de outra maneira?


Abraço

When you steal from one author, is called plagiarism, when you steal from many is called research.

[WWW] [MSN]
GutomCosta
Thread.start()
[Avatar]

Membro desde: 08/08/2005 20:20:59
Mensagens: 32
Localização: Rio de Janeiro
Offline

Olá.

Os atributos da classe realmente pertence a classe Usuário e não as Migrations. As migrations são artifícios utilizados pelo rails para manutenção da sua base de dados.
Bem, uma vez que eu defini que minha tabela Users vai ter as colunas login,password, o ActiveRecord consegue modificar a classe User em tempo de execução adicionando nesta classe estes atributos.
Repare que existe um conceito fundamental do Rails por trás desta explicação. É Convention over Configuration. Vc tem uma tabela Users, por convenção a classe User vai ser persistida nesta tabela.
Devido a estas convenções o framework ActiveRecord pode adicionar vários comportamentos a classe em tempo de execução. Exemplo:

- os métodos find_by_<<nome do atributo>>
- os métodos de save, update , remove.

Dentre outros.
Isto só é possível porque Ruby é uma linguagem dinâmica. Nestes casos o uso do Padrão ActiveRecord é uma opção bem interessante.

Valeu




Luiz Costa
www.sagadoprogramador.com.br
[WWW] [MSN]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

o que esta te confundindo é que os atributos do usuário são criados automaticamente,
se a classe tem nome "User", o rails vai inferir o nome da tabela, que neste caso vai ser "users"
vai listar todos os campos e definir os atributos correspondentes na classe "User", mas se você quiser, você pode definir mais atributos na classe User (tem exemplos disto no meu blog e no meu livro também )

Quanto ao create do usuário, você pode fazer:
params[:user][:active] = true
@user = User.new(params[:user])

Ou então dentro do Model (que seria o local correto), poderia utilizar um "before_create" para fazer esta e outras alterações ...

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
Filipe Chagas
JavaGuru
[Avatar]
Membro desde: 18/09/2006 15:26:48
Mensagens: 226
Offline

Muuuuuuuuuuito tempo depois.....

Existe algum comando pra executar no ./script/console que me liste todos os atributos de um model?
Porque, depois de um tempo, é simplesmente impossível ficar olhando as migrations pra isso. E eu acho que ter que olhar no banco de dados pra saber os atributos é algo totalmente fora dos padrões Rails.


@filipechagas
about.me/filipeochagas
filipechagas.wordpress.com

<><
Jesus te ama!
[WWW]
Filipe Chagas
JavaGuru
[Avatar]
Membro desde: 18/09/2006 15:26:48
Mensagens: 226
Offline

Filipe Chagas wrote:
Existe algum comando pra executar no ./script/console que me liste todos os atributos de um model?


Postei antes de pesquisar... cometi um pecado capital... espero ainda ter salvação...
No ./script/console basta digitar o nome do model e dar um enter.


@filipechagas
about.me/filipeochagas
filipechagas.wordpress.com

<><
Jesus te ama!
[WWW]
 
Índice dos Fóruns » Ruby & Ruby on Rails
Ir para:   
Powered by JForum 2.1.8 © JForum Team