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
class User < ActiveRecord::Base
E a migration esta assim
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :login
t.string :password
t.boolean :ativo
t.timestamps
end
end
def self.down
drop_table :users
end
end
E o metodo create do controller esta assim
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
flash[:notice] = 'User was successfully created.'
format.html { redirect_to(@user) }
format.xml { render :xml => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
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:
def create
@user = User.new(params[:login],params[:password],true)
respond_to do |format|
if @user.save
flash[:notice] = 'User was successfully created.'
format.html { redirect_to(@user) }
format.xml { render :xml => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
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