Anda di halaman 1dari 11

Notas de ROR

Problemas y soluciones
1) An error occurred while installing rake (10.4.2), and Bundler cannot continue.
Make sure that `gem install rake -v '10.4.2'` succeeds before bundling.
C> gem install rake -v '10.4.2'
ERROR: Could not find a valid gem 'rake' (= 10.4.2), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect retur
La solucin se encuentra en la direccin URL:
https://gist.github.com/luislavena/f064211759ee0f806c88#installing
-using-update-packages-new:

Instalar actualizacin de update-packages:


C> gem --version para ver la version de gem, si esta corriendo una de
las sig versiones descargar la version de al lado de la pgina:
https://github.com/rubygems/rubygems/releases/tag/v2.0.15
Running 1.8.x: download 1.8.30
Running 2.0.x: donwload 2.0.15
Running 2.2.x: download 2.2.3

Luego ejecutar segn la versin instalada y la ubicacin de la gema


C> gem install --local C:\rubygems-update-1.8.30.gem
C> update_rubygems --no-ri --no-rdoc

Verificar la version nuevamente: gem version

Desinstalar el rubygems-update: gem uninstall rubygems-update x

2) ExecJS::ProgramError in Welcome#index
Showing c:/rails_code/gag_cf/app/views/layouts/application.html.erb where line #6
raised:
TypeError: El objeto no acepta esta propiedad o mtodo, tambin: invalid byte

sequence in UTF-8

Agregar al Gemfile la sig. lnea: gem 'coffee-script-source', '~> 1.8.0',


luego ejecuta: bundle update coffee-script-source y reiniciar el
servidor.

3) ExecJS::RuntimeError in...

Ingresar a la carpeta RailsInstaller, buscar un archivo llamado runtimes.rb


y abrirlo, reemplazar en estos 2 archivos el sig. script por el que ya existe:

JScript = ExternalRuntime.new(
:name

=> "JScript",

:command

=> "cscript //E:jscript //Nologo",

:runner_path => ExecJS.root + "/support/jscript_runner.js",


:encoding

=> 'UTF-8' # CScript with //U returns UTF-16LE

)
4) ActiveModel::ForbiddenAttributesError

En el controlador donde se encuentra el mtodo del error, definir el sig.


mtodo:

private
def ad_params
#Aqu se definen los parmetros modificables
params.require(:ad).permit(:title, :price, :description)
end
5) ERROR: Failed to build gem native extension on Windows
Al parecer hay problemas con gemas de ruby > 2.4.0, por lo que se debe
actualizar: gem update --system 2.3.0

Devise
1) Para ms documentacin visitar:
https://github.com/plataformatec/devise y/o
https://rubygems.org/gems/devise. Instalar Devise:

Agregar en gemfile: gem 'devise', '~> 3.5.1', ejecutar bundle.

Generar el componente en el proyecto: rails g devise:install (Con este


comando se fusionan todos los elementos que trae device a nuestro
proyecto), al hacerlo nos muestra en consola una serie de instrucciones
que se deben seguir.

Crear modelo con devise: rails g devise nombreModelo, el archivo de


migracin creado es personalizable.

Ejecutar la migracin rake db:migrate

Crear vistas por defecto con devise: rails g devise:views

Si necesito generar un controller para alguna vista devise lo puedo hacer


con la sig sintaxis: rails g devise:controllers
nombre_controller_en_plural

Crear vistas personalizadas con devise: rails g devise:views


nombre_vista_en_plural, en este caso, para visualizar los cambios que
se hagan en los archivos de estas vistas, se debe descomentar la lnea
config.scoped_vistas = false que se ve en la imagen correspondiente
al archivo config/devise.rb y cambiar el valor a true.

Lnea descomentada y con valor true del archivo config/devise.rb para ver los cambios en las vistas
personalizadas

2) Para lograr que los nuevos campos en el modelo devise sean permitidos al guardar
y actualizar se deben sanitizar(asigarle los permisos) en el controlador de la
aplicacin.

Configurando devise para permitir atributos personalizados del devise

3) Para utilizar los atributos del modelo con la linea attr_accessible en el archivo
del modelo, se debe instalar la gema: 'protected_attributes' y correr el
bundle.

Rails
1) Crear nuevo proyecto: rails new nombre_proyecto
2) Arrancar servidor: Desde el directorio del proyecto creado tipear rails s rails
server
3) Iniciar consola de Rails: rails c
5) Poner alias a rutas en routes.rb:
- get "alemania" => 'mi_primer_controller#alemania', :as => :alemania
- get "colombia", do: 'mi_primer_controller#colombia', as: Colombia
Lo anterior facilita los direccionamientos con link_to, ej:
<%= link_to_unless_current "Ir a Argentina", argentina_url %>
6) Iniciar Rails en diferentes entornos:
Consola -> rails s e production, rails s e test, por defecto toma entorno
desarrollo

7) Definir diferentes entornos para bases de datos al crear los modelos y ejecutar
el rake db:migrate :
C> set RAILS_ENV = production, set RAILS_ENV = test, set RAILS_ENV
= development, por defecto toma developer.
8) Configurar MySQL:
- Al crear el Proyecto: rails new nombre_proyecto d mysql
- Ingresar a carpeta del nuevo proyecto y tipear: gem install mysql2
- Copiar y pegar el archivo libmysql.dll de la ruta de MySQL a la ruta
RailsInstaller\Ruby2.0.0\bin
- Crear las bases de datos y esos nombres de DB(pro, dev y test) escribirlos en el
archivo database.yml
9)
Sitio
web
para
documentacin
http://guides.rubyonrails.org/migrations.html

sobre

migraciones:

10) Regresar a una versin de migracin:


C> Rake db:migrate VERSION=numeracin_de_versin EJ:
Para
regresar
a
la
versin
20150719191326_add_marca_articulo.rb

de

la

migracin

escribir

resources

Rake db:migrate VERSION=20150719191326.


11) Deshacer ltima migracin realizada:
Rake db:rollback
12) Deshacer ltimas n migraciones realizadas:
Rake db:rollback STEP=3
13)
Utilizar
REST:
:nombre_controlador;

en

el

archive

routes.rb

- Si se desea excluir algunos mtodos: resources :controlador, :only =>


[:update, :show, etc] tambin resources :controlador, :except =>
[:update, :show, etc]
14) Obtener nombre de controlador y/o accin:

- @accion = action_name, @controlador = controller_name


15) Obtener mtodo de request que se est utilizando:
- @metodo = request.request_method
16) Preguntar tipo de request: (request.get?, request.post?, request.put?,
request.delete?)
- if request.get?
@usuario = Usuario.new
Else
@usuario = Usuario.save
End
17) Saber si peticin es AJAX:
- request.xml_http_request? request.xhr?
18) Sitio para descargar gemas: https://rubygems.org
19) Gema para manejo de sesin de usuario: DEVISE
20) Herramienta para combinacin de colores: http://paletton.com/
21) Al crear en modo automatico, campos tipo Date como el creado en este
ejemplo para nacimiento, automaticamente pone los aos partiendo del ao 2010
al 2020.. donde puedo cambiar ese default?: Busca el view de ese formulario,
ubica el codigo que general el dropdown de fechas y aadele una variable como
esta: start_year: 1990.
Aqui
esta
la
explicacion
en
el
API
de
Rails:
http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#m
ethod-i-date_select
22) Refrescar la DB desde consola de RAILS Ej: user.post_edits(true)

Consultas y Scopes
-

Scopes: Querys predefinidos en los modelos y pueden ser llamados como


mtodos y/o consultas, se pueden incluir en otro scope, pueden ser llamados
en relaciones de clases:
scope :published, -> {where status: true} es el equivalente a:
def self.published
where status: true

end
Aplicado podra ser as: Post.published
1) Pasando argumentos a un Scope:
-

Definicin: scope :created_before, -> (args){where (created_at


> ?, args)}

Aplicacin: Article.created_before(Date.yesterday)
EJ:

scope :search, -> (word) {where("title LIKE ?", "%#{word}%")}


Scopes con rangos:
scope :recent, -> {where created_at: 1.day.ago..Time.now}
2) Mtodos de consultas:
-

Post.where status: true

(Post.where status: true).order(title: :desc)

Post.where title: Mi primer post, status: true, solo soporta: igual,


rangos y no soporta OR, LIKE, <>

Post.where(title = Mi primer post and status = t ), soporta OR,


LIKE, <>

Post.where(title = ? and status = t , Mi primer post)

Ver consulta sql: Post.where(title = ? and status = t , Mi primer


post).to_sql

(Post.where status: true).limit 2

(Post.where status: true).offset 2 obvia o ignora los 2 primeros

Post.select :title

Post.select(:title).where status: true, id: 1..4

Post.all.order(title: :desc).select(:id, :title)

Post.select(:id, :title).order(title: :desc)

3) Relaciones:
-

Uno a Uno: has_one Ej:


Un aula has_one profesor y un profesor belongs_to un aula, el FK va en la
tabla del profesor. Profesor.materia_id

Uno a Muchos: has_many Ej:


Un profesor has_may cursos y un curso belongs_to profesor, el FK va en la
tabla de cursos. Curso.profesor_id

Muchos a Muchos simple: has_and_belongs_to_many Ej:


Un estudiante has_many cursos y tambin belongs_to muchos cursos, en
este caso se utilizan 2 FK pero en una tabla de unin(JOIN) con los campos
estudiante_id y curso_id.
Las tablas JOIN van en minsculas y notacin camello, ordenadas
alfabticamente Ej: collaborators_projects, categories_posts
En las relaciones m:n simples, las tablas JOIN tablas no tendrn un modelo
asociado, no tienen un ID, por lo que se debe indicar id: false.

Ilustracin 1 Fragmento de migracin para tabla de JOIN

Con la sintaxis t.belongs_to :category, index: true y t.belongs_to :category,


index: true de la imagen anterior se crea la tabla categories_posts con los
campos category_id y post_id
En los modelos de esta relacin se debe indicar el tipo de relacin con
has_and_belongs_to_many Ej:

Ilustracin 2 Fragmento de cdigo de modelos con relacin m:n

Muchos a Muchos complejas:

En el caso de la imagen es necesario utilizar relaciones m:n complejas,


debido a que se desea llevar un registro de inscripciones de los estudiantes
en los cursos. Para esto en la la tabla JOIN cursos_inscripciones se utilizan
los FK indexados indicando la relacin belongs_to :curso y belongs_to
:estudiante, adems, las entidades Curso y Estudiante deben tener, cada
una, la relacin has_many :cursos_inscripciones.
Al crear el modelo que corresponde con la tabla JOIN sabemos que se crea la
migracin, y en esta debemos hacer referencia a las entidades en
cuestin, Ej:

Fragmento de cdigo de la referencia que hace la tabla JOIN a las tablas en cuestin en una relacin m:n
compleja

En la imagen anterior vemos que la tabla JOIN utiliza la sintaxis


t.references :post, index: true y t.references :user, index: true.
Comparado con has_and_belogns_to_many:

An se utiliza una tabla JOIN con los FK indexados.

En este caso si requiere un PK.

Aqu es necesario un modelo propio.

Adems de los campos mencionados, puede tener ms campos o


columnas.

Anda mungkin juga menyukai