#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
Я мог бы объяснить подробнее об этом, если вы хотите.
@K M Rakibul Islam: Спасибо Ракиб :) Ваше предложение сработало для меня с небольшими изменениями в коде в моем приложении, спасибо за помощь. –
Вас приветствуем Правейн :) –