在rails站点上创建用户区域

时间:2014-09-16 08:57:49

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

我想知道是否有人可以给我一些关于最佳下一步的指导,因为我还在学习轨道。基本上,我有一个网站,允许用户注册,登录,注销和编辑他们的个人资料。我通过设计进行身份验证。我为网站所有者而非公众提供了一个管理区域。我选择这样做,因为它是一个电子商务网站,我希望用户部分更加自定义。我现在想要创建以下页面的页面。

用户查看订单历史记录的状态页 优惠券兑换的奖励页面, 一个页面,供用户查看他们当前注册的子订单。

我已经在下方添加了我的用户代码,但是如果有人可以给我一些帮助来接近这一点,那将是非常感激的,因为我无法理解我最好的下一步!

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable


  has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100#" }, :default_url => "/images/:style/missing.png"
  validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/


  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates :name, presence: true

  has_many :listings, dependent: :destroy
  # # a listings existence depends on the existence of the user that created it
  # has_many :sales, class_name: "Order", foreign_key: "seller_id"
  has_many :purchases, class_name: "Order", foreign_key: "buyer_id"

1 个答案:

答案 0 :(得分:1)

Emma - 欢迎来到Rails!首先,StackOverflow真正用于特定的编程问题。我知道你需要知道哪条路走下去,所以这就是我要做的事情:


<强>设计

由于你正在使用Devise(伟大的宝石),让我给你一些有关它如何工作的信息。

Devise是一个authentication系统 - 意味着它可以处理应用的注册,登录和会话维护。具体来说,在使用Devise时,它将仅用作管理访问到您的应用的方式。 IE不担心Devise

你会找到great resource on Devise / Authentication here

enter image description here


<强>功能

根据您的问题,系统的功能应包含在管理区域中。创建它实际上相对简单(所有由Devise完成的繁重工作):

#config/routes.rb
namespace :admin do
   root: "application#dash"
   resources :orders
   resources :products
end

root: "products#index"
resources :products, only: [:index, :show]

这将使您能够使用以下代码:

#app/controllers/products_controller.rb
class ProductsController < ApplicationController
   #No authentication required
   def index
      @products = Product.all
   end

   def show
      @product = Product.find params[:id]
   end
end

请注意,上述控制器没有任何身份验证?它只是用来让您能够向用户展示产品/产品。这是“前端”,可以用于从“产品”到“页面”等的所有内容

您正在寻找的功能位于“后端” - “管理员”区域。我们使用:admin namespace来实现这一目标,它基本上为我们提供了一个文件夹,我们的管理员为中心的控制器将存在:

#app/controllers/admin/application_controller.rb
class Admin::ApplicationController < ActionController::Base
   before_action :authenticate_user!

   def dash
      #stuff here
   end
end

#app/controllers/admin/products_controller.rb
class Admin::ProductsController < Admin::ApplicationController
    ....
end

这样做的好处是admin命名空间表面上是“自包含的”(admin/application_controller管理身份验证,子控制器继承它)。

除此之外,这应该为您提供一个稳定的平台,以便向前推进。

-

<强>资源

以下是一些很好的资源: