2015-09-26 3 views
4

У меня есть новый проект Rails, в проекте у меня есть контроллер, вид и модель с именем Customer. Теперь, что мне нужно, что рядом с CRUD действия мне нужно добавить две новые страницы, как:Добавление новой страницы в Rails 4 Приложение

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

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

И я хочу, чтобы вставить код в этих файлах. Как достичь этого, я имею в виду создание новых ссылок и lease?

ответ

6

В файле routes.rb вы можете добавить эти два маршрута:

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 

Затем, вы можете добавить два новых метода (действия) в файле 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, где вы поместите свой код для просмотра.

+1

@K M Rakibul Islam: Спасибо Ракиб :) Ваше предложение сработало для меня с небольшими изменениями в коде в моем приложении, спасибо за помощь. –

+0

Вас приветствуем Правейн :) –

1

я думаю, его лучше использовать ресурс

просто пример, потому что я не знаю, как вы решите между продажи и аренды клиента

маршруты:

resources :customers 

и дать index route a параметр, необходимый для получения всех и 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') 
+0

спасибо, Роб, я смешал предложенный выше метод @K M Rakibul Islam и ваш предложенный метод «использования ресурсов», и я решил проблему. –

2
#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, вы можете быть лучше смотреть в nested resources.

Вы должны помнить, что 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 (Single Table Inheritance) для создания различных экземпляров одного и того же типа класса для Sale и Lease:

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

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

Я мог бы объяснить подробнее об этом, если вы хотите.

+0

Большое спасибо, Ты помог мне найти новый и более сжатый способ решить мою проблему :) –

Смежные вопросы