在Rails 4应用程序中添加新页面

时间:2015-09-26 04:07:31

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我有新的Rails项目,在项目中我有一个名为Customer的控制器,视图和模型。现在,我需要的是在CRUD动作旁边我需要添加两个新页面,如:

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

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

我想在这些文件中插入代码。 我如何实现这一点,我的意思是创建新的salelease链接?

3 个答案:

答案 0 :(得分: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.erbcreate_lease.html.erb创建两个视图,您可以在其中放置与视图相关的代码。

答案 1 :(得分: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

嵌套资源

顺便说一下,你应该考虑一些事情。

  

我的意思是创建新的salelease

如果您想为Customer创建新的销售或租约,您可能会更好地关注nested resources

你必须记住Rails是面向对象的。控制器旨在让您能够CRUD特定对象 - IE创建,编辑,更新,销毁等。

-

我看到很多人都在问他们如何能够&#34;添加&#34;控制器的方法。这不是问题。但是,当您尝试将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)SaleLease创建相同班级类型的不同实例:

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

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

如果你愿意,我可以解释一下这个。

答案 2 :(得分:1)

我认为最好使用资源

只是一个例子,因为我不知道你如何决定销售和租赁客户

路线:

resources :customers

并为index route提供一个参数以获取所有salelease customers

customercontroller

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

并在您的观看中使用此

customers_path(customer_type: 'sale')