Adding a New Page to a Rails 4 Application

I have a new Rails project, in the project I have a controller, view and model with a name Customer. Now I need to, in addition to the actions, CRUDI need to add two new pages, for example:

1. http://0.0.0.0:3000/Customer/sale

2. http://0.0.0.0:3000/Customer/lease

And I want to paste the code into these files. How can I achieve this, I mean creating new links saleand lease?

+4
source share
3 answers

In your file routes.rbyou can add these two routes:

  resources :customers do
    collection do
      get 'create_sale' => 'customers#create_sale', as: :create_sale
      get 'create_lease' => 'customers#create_lease', as: :create_lease
    end
  end

Then you can add two new methods (actions) to your file customers_controller.rb:

  def create_sale
    # your logic goes here
  end

  def create_lease
    # your logic goes here
  end

app/views/customers/ create_sale.html.erb create_lease.html.erb, , .

+6
#config/routes.rb
resources :customers do
   %w(sale lease).each do |route|
      get route.to_sym, action: route.to_sym, as: route.to_sym
   end
end

:

#app/controllers/customers_controller.rb
class CustomersController < ApplicationController
    def sale
    end

    def lease
    end
end

, .

sale lease

Customer, .

, Rails . , CRUD - IE , , , ..

-

, , "" . . , , create , .

, . , :

#config/routes.rb
resources :customers do
    resources :leases, controller: :purchases, {type: :lease}
    resources :sales, controller: :purchases, {type: :sale}
end

#app/controllers/purchases_controller.rb
class PurchasesController < ApplicationController
   def new
      @customer = Customer.find params[:customer_id]
      @purchase = @customer.purchases.new(type: params[:type])
   end
   def create
      @customer = Customer.find params[:customer_id]
      @purchase = @customer.purchases.new purchase_params
   end

   private

   def purchase_params
      params.require(:purchase).permit(:type, :customer_id :etc, :etc)
   end
end

#app/models/purchase.rb
class Purchase < ActiveRecord::Base
   belongs_to :customer
end

#app/models/customer.rb
class Customer < ActiveRecord::Base
   has_many :purchases
end

, STI ( ) sale lease:

#app/models/sale.rb
class Sale < Purchase
end

#app/models/lease.rb
class Lease < Purchase
end

, .

+2

,

, ,

:

resources :customers

index route a, sale lease customers

CustomerController

def index
  customer_type = params[:customer_type] || ['sale','lease']
  @customers = Customer.where(customer_type: customer_type)
end

customers_path(customer_type: 'sale')
+1
source

Source: https://habr.com/ru/post/1609064/


All Articles