Rails 5:用户(设计)并在单个页面上管理多个表

时间:2018-10-25 17:23:32

标签: ruby-on-rails rest model-view-controller

我曾经使用Laravel进行过这项工作,但现在正尝试在Rails应用中将其整合在一起。

基本上,我目前已按照以下步骤设置了新的Rails应用程序:

  1. rails new MyApp
  2. 已安装的装置
    • 将设计添加到Gemfile
    • bundle
    • rails g devise:install
  3. 设置自定义设备控制器和视图
    • rails g devise:controllers users
    • rails g devise:views users
  4. 添加了用于设计用户的自定义字段并更新了新视图/编辑视图

至此,一切正常。我能够登录/注销并与数据库正确通信。

更新

我的问题的第一部分

Saqib Shahzad的回答已经回答了如何将与用户有关的行带入特定页面。

出于所有密集的目的,我设置了一个Home控制器和相关视图,使我可以引入所有相关信息。

这是第二部分

现在我要做的是在创建用户的同时在单独的表上为用户创建一行。

user.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  has_one :order
end

order.rb:

class Order < ApplicationRecord
  belongs_to :user
end

订单迁移:

class CreateOrders < ActiveRecord::Migration[5.2]
  def change
    create_table :orders do |t|
      t.belongs_to :user
      ...
end

因此,假设我正在使用devise ...如何在创建用户时如何在Orders表中创建必要的行,以便在注册后,他们可以立即查看其订单信息。 (显然,这将仅显示字段的默认值,因为它们尚未编辑任何内容)

所以...

  1. 人员在注册页面上填写注册信息。
  2. 人员点击提交
  3. 在用户和订单表中都为新用户提供了新行(用户和用户的订单已创建)
  4. 人员将立即重定向到他们的主页,该页面显示他们的订单值

1 个答案:

答案 0 :(得分:0)

因此,我从您的问题中了解到的是,您只想在页面上(最好是homepage)显示每个用户的订单。非常简单。

创建一个Home Controller和一个动作,您可以根据自己的喜好命名dashboard / homepage / my_orders

def homepage
  @order = current_user.order
end

在您看来,home/homepage

显示要显示的任何信息:例如:

if @order.present?
    @order.name
    link_to "Edit", edit_order_path
    link_to "Destroy",@order,method: :delete
else
    link_to "create order", new_order_path
end

new_order_path会将用户带到创建新订单的形式(订单控制器)

在您的orders_controller新操作中,无需初始化

@order = Order.new

初始化为:

@order = current_user.order.new

我希望这能消除任何混乱。

更新:

如果您希望在创建用户时立即自动创建订单,则可以使用after_commit方法进行操作。

在您的user.rb模型中,通过以下方式创建用户后创建订单:

after_create_commit {self.order.create(name: "somename",other_attribute: "value")}