我试图在一个控制器中创建两个模型.我想创建一个用户注册的新页面.当用户登录时,应显示订单表格.我应该在哪个页面中创建此订单表单?
当用户点击新页面中的提交按钮时,将调用create方法..现在,当我单击订单中的提交按钮时,我需要相同的操作..我应该在哪里创建此表单?可以在新页面中显示多个表单吗?任何人都可以建议我..
既然你是新人,我会解释它是如何运作的.
这不是严格要求回答SO问题的方式,但既然你是新的,我会写的.如果你想删除Q或其他什么,我不介意.
-
用户登录时,应显示订单
这是一个用户故事.
当你处理应用程序开发时,你应该围绕用户如何到达那里,他们应该获得什么以及它应该如何工作的"故事".许多人将此称为"背景".
您没有解决的一个重要问题是为什么要向用户显示订单 - 这是为了什么?
要直接回答您的问题,您需要查看身份验证.
验证基本上是用户是否登录/注册.不要与授权混淆,授权是指用户是否有权执行操作.
Rails的最佳身份验证系统是Devise.您可以在此处查看有关如何使用它的教程:http://railscasts.com/episodes/209-introducing-devise
您需要两个模型,您必须单独处理:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :orders
end
#app/models/order.rb
class Order < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个起点,您将能够创建您的controllers和views.
-
因为Rails被设计为面向对象,所以你所做的一切都应该以你正在处理的对象为中心.
因此,你需要处理users和orders单独(IE浏览器创建用户时,他们立即去orders#new行动):
#config/routes.rb
devise_for :users #-> url.com/users/sign_in
resources :orders #-> url.com/orders/new
Run Code Online (Sandbox Code Playgroud)
以上是资源丰富的路由,我会告诉你这是什么.
您需要的是以下内容:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
resource.orders.count > 0 ? new_order_path : root_path
end
end
#app/controllers/orders_controller.rb
class OrdersController < ApplicationController
before_action :authenticate_user!
def new
@order = current_user.orders.new
end
def create
@order = current_user.orders.new order_params
@order.save
end
private
def order_params
params.require(:order).permit(:x, :y, :z)
end
end
Run Code Online (Sandbox Code Playgroud)
这将在用户orders/new登录后将用户重定向到该操作.如果他们在未经过身份验证的情况下访问该操作,他们将被带到"登录/注册"路径.
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |