RAILS - Arrancar una nueva aplicación, Básico

18-04-2019

creawww.com

Instalar rails

gem install rails

instalar rails

rails new . -T

-T para que no instale test defaul minitest

Add to Gemfile rspec-rails and capybara (test group)

editar el /Gemfile y añadir:

group :test do
  gem 'rspec-rails', '~> 3.7.1'
  gem 'capybara', '~> 2.15.4'
end

actualizar las gemas

bundle install

instalar la gema de rspec

rails generate rspec:install

add config to /.rspec

--require spec_helper
--format documentation
--order random
--color

Ejecutar las migraciones

rake db:migrate

arrancamos servidor

rails s

la aplicacion corre en http://localhost:3000

algunos generadores Rails

rails g scaffold Provider active:boolean name:string nif_cif:string address:string cp:string city:string region:string day:string note:text

rails generate model Provider active:boolean name:string nif_cif:string address:string cp:string city:string region:string day:string note:text

rails g controller Providers index

crear providers

rails g scaffold Provider active:boolean name:string nif_cif:string address:string cp:string city:string region:string day:string note:text

rake db:migrate    

scaffold test providers

rails g rspec:scaffold Provider

creacion de seed para importacion de database

a;adir a /db/seeds.rb

require 'csv'

path = Rails.root.join('lib', 'seeds', "Providers.csv")
CSV.foreach(path, :headers => true, encoding: "UTF-8") do |row|
   Provider.create(row.to_hash)#Model is the name of your model
end

poner los archivos csv en /lib/seeds/

rails db:seed

relaciones 1:many

provider->contact

rails g migration addprovideridtocontacts provider:references

rails db:migrate

Añadimos la relacion a models

  class Provider < ApplicationRecord
    has_many :contacts
  end


  class Contact < ApplicationRecord
    belongs_to :provider
  end

relacion many:many

provider<->certificate

rails generate model Certificate name:string image:string

creamos la tabla de union

rails g model Providercertificate provider:belongs_to certificate:belongs_to

ejecutar migracion

rails db:migrate

a;adira al controlado de provider Certificados

para mostrarlo en new

  # GET /providers/new
  def new
    @provider = Provider.new
    @certificates = Certificate.all
  end

para guardarlo en create

  # POST /providers
  def create
  @provider = Provider.new(provider_params)
  @provider.certificates = params[:certificates]

a;adir a las vista para que los muestre app/views/provider/_form.html.erb


<div class="field">
<label>Certificados</label>
<% @certificates.each do |c| %>
<div class="field"><%= check_box_tag "certificates[]", c.id %> <%= c.name%></div>
<% end %>
</div>

aadir al model de provider para que los reciba y almacene

```
aftercreate :savecertificates

def certificates=(value)
@certificates = value
end

def savecertificates
@certificates.each do |certificate
id|
Providercertificate.create(certificateid: certificateid, provider_id: self.id)
end
end
```
añadira a los strong parameters

certificates

añadir la asociacion a los models

class Provider < ApplicationRecord
has_many :providercertificates
has_many :certificates, through: :providercertificates
end


class Certificate < ApplicationRecord
has_many :providercertificates
has_many :providers, through: :providercertificates
end

otra forma es

class Provider < ApplicationRecord
  has_many :provider_certificates
  has_many :certificates, through: :provider_certificates
end

class Providercertificate < ApplicationRecord
  belongs_to :provider
  belongs_to :certificate
end

class Certificate < ApplicationRecord
  has_many :provider_certificates
  has_many :providers, through: :provider_certificates
end