我曾经使用Laravel进行过这项工作,但现在正尝试在Rails应用中将其整合在一起。
基本上,我目前已按照以下步骤设置了新的Rails应用程序:
rails new MyApp
bundle
rails g devise:install
rails g devise:controllers users
rails g devise:views users
至此,一切正常。我能够登录/注销并与数据库正确通信。
更新
我的问题的第一部分
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表中创建必要的行,以便在注册后,他们可以立即查看其订单信息。 (显然,这将仅显示字段的默认值,因为它们尚未编辑任何内容)
所以...
答案 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")}