在 rails 上保存 current_user 设计 ruby 的电子邮件数据。创建订单时
Save current_user email data from devise ruby on rails. When creating a Order
感谢您抽出时间来帮助我。
我希望能够在客户创建新订单时保存 current_user 设计数据。按照我能找到的所有内容,我设法让 user_id 保存但不是我需要的东西,比如电子邮件。我会密切关注这个 post.
为澄清起见,我需要在提交表单时保存帐户数据,以避免用户再次添加数据,如姓名电子邮件等。此数据已保存在设计用户帐户中。所以我想用提交的表格提交。
我在orders_controller.rb
看到过这样的事情
def create
@order = current_user
end
但它根本不保存任何数据。当我在 post 的底部执行此操作时,您可以看到控制台输出。为零。
型号:
User.rb
class User < ActiveRecord::Base
has_many :orders
# Include default devise modules. Others available are:
# , :lockable, :timeoutable and :omniauthable , :registerable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
attr_accessor :email
end
order.rb
class Order < ActiveRecord::Base
belongs_to :user
attr_accessor :email
end
控制器:
orders_controller.rb
class OrdersController < ApplicationController
before_filter :authenticate_user!
def new
@order = Order.new
end
def create
@order = Order.new(order_params)
@order = current_user.orders.new(params[:email])
if @order.save
redirect_to dconfirmation_path
end
end
def order_params
params.require(:order).
permit(
:email,
:delivery_name,
:company_name,
:delivery_address1,
:delivery_address2,
:delivery_address3,
:delivery_city,
:delivery_postcode,
:delivery_country,
:phone,
:package_contents,
:description_content,
:restricted_items,
:terms_conditions,
:insurance,
:contents_value,
:cf_reference,
:reference_number
)
end
def show
@user = User.find(params[:id])
end
def confirmation
end
end
现在所有字段都保存在表单中,user_id 很好,但我需要能够通过电子邮件显示订单创建者。如果我转到控制台并执行 Order.Last 这是保存的数据,例如:
Order Load (0.6ms) SELECT "orders".* FROM "orders" ORDER BY "orders"."id" DESC LIMIT 1
=> #<Order id: 13, delivery_name: nil, company_name: nil, delivery_address1: nil, delivery_address2: nil, delivery_address3: nil, delivery_city: nil, delivery_postcode: nil, delivery_country: nil, phone: nil, package_contents: nil, description_content: nil, restricted_items: nil, terms_conditions: nil, insurance: nil, contents_value: nil, cf_reference: nil, reference_number: nil, created_at: "2015-06-30 20:54:22", updated_at: "2015-06-30 20:54:22", user_id: 2, name: nil, address_line_1: nil, address_line_2: nil, postcode: nil, city: nil, country: nil, email: nil>
我当然不想要
email: nil>
为零 current_user 有一封分配给该帐户的电子邮件,我想将其保存在那里
-可选数据 ?
迁移:
20150630090050_add_user_id_to_orders.rb
class AddUserIdToOrders < ActiveRecord::Migration
def change
add_column :orders, :user_id, :integer
add_column :orders, :name, :string
add_column :orders, :address_line_1, :string
add_column :orders, :address_line_2, :string
add_column :orders, :postcode, :string
add_column :orders, :city, :string
add_column :orders, :country, :string
end
end
add_email_to_orders.rb
class AddEmailToOrders < ActiveRecord::Migration
def change
add_column :orders, :email, :string
end
end
ps。我将提供所需的任何其他详细信息。
理想情况下,您不会将电子邮件存储在订单中,但如果必须,您可以通过简单的赋值来完成
@order = current_user.orders.new(order_params)
@order.email = current_user.email
if @order.save
请注意,您有两行 @order =...
。那行不通,第二个完全取代了第一个。我上面的建议都将 current_user.id 分配给 @order 以及表单参数。
如果您选择不将电子邮件存储在订单记录中,那么您可以使用my_order.user.email
检索订单的电子邮件,或者...
class Order < ActiveRecord::Base
belongs_to :user
delegate :email, to: :user
...
end.
哪个会让你做...
my_order.email
...不需要 Order 模型中的属性。
..
感谢您抽出时间来帮助我。
我希望能够在客户创建新订单时保存 current_user 设计数据。按照我能找到的所有内容,我设法让 user_id 保存但不是我需要的东西,比如电子邮件。我会密切关注这个 post.
为澄清起见,我需要在提交表单时保存帐户数据,以避免用户再次添加数据,如姓名电子邮件等。此数据已保存在设计用户帐户中。所以我想用提交的表格提交。
我在orders_controller.rb
看到过这样的事情def create
@order = current_user
end
但它根本不保存任何数据。当我在 post 的底部执行此操作时,您可以看到控制台输出。为零。
型号:
User.rb
class User < ActiveRecord::Base
has_many :orders
# Include default devise modules. Others available are:
# , :lockable, :timeoutable and :omniauthable , :registerable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
attr_accessor :email
end
order.rb
class Order < ActiveRecord::Base
belongs_to :user
attr_accessor :email
end
控制器:
orders_controller.rb
class OrdersController < ApplicationController
before_filter :authenticate_user!
def new
@order = Order.new
end
def create
@order = Order.new(order_params)
@order = current_user.orders.new(params[:email])
if @order.save
redirect_to dconfirmation_path
end
end
def order_params
params.require(:order).
permit(
:email,
:delivery_name,
:company_name,
:delivery_address1,
:delivery_address2,
:delivery_address3,
:delivery_city,
:delivery_postcode,
:delivery_country,
:phone,
:package_contents,
:description_content,
:restricted_items,
:terms_conditions,
:insurance,
:contents_value,
:cf_reference,
:reference_number
)
end
def show
@user = User.find(params[:id])
end
def confirmation
end
end
现在所有字段都保存在表单中,user_id 很好,但我需要能够通过电子邮件显示订单创建者。如果我转到控制台并执行 Order.Last 这是保存的数据,例如:
Order Load (0.6ms) SELECT "orders".* FROM "orders" ORDER BY "orders"."id" DESC LIMIT 1
=> #<Order id: 13, delivery_name: nil, company_name: nil, delivery_address1: nil, delivery_address2: nil, delivery_address3: nil, delivery_city: nil, delivery_postcode: nil, delivery_country: nil, phone: nil, package_contents: nil, description_content: nil, restricted_items: nil, terms_conditions: nil, insurance: nil, contents_value: nil, cf_reference: nil, reference_number: nil, created_at: "2015-06-30 20:54:22", updated_at: "2015-06-30 20:54:22", user_id: 2, name: nil, address_line_1: nil, address_line_2: nil, postcode: nil, city: nil, country: nil, email: nil>
我当然不想要
email: nil>
为零 current_user 有一封分配给该帐户的电子邮件,我想将其保存在那里
-可选数据 ?
迁移:
20150630090050_add_user_id_to_orders.rb
class AddUserIdToOrders < ActiveRecord::Migration
def change
add_column :orders, :user_id, :integer
add_column :orders, :name, :string
add_column :orders, :address_line_1, :string
add_column :orders, :address_line_2, :string
add_column :orders, :postcode, :string
add_column :orders, :city, :string
add_column :orders, :country, :string
end
end
add_email_to_orders.rb
class AddEmailToOrders < ActiveRecord::Migration
def change
add_column :orders, :email, :string
end
end
ps。我将提供所需的任何其他详细信息。
理想情况下,您不会将电子邮件存储在订单中,但如果必须,您可以通过简单的赋值来完成
@order = current_user.orders.new(order_params)
@order.email = current_user.email
if @order.save
请注意,您有两行 @order =...
。那行不通,第二个完全取代了第一个。我上面的建议都将 current_user.id 分配给 @order 以及表单参数。
如果您选择不将电子邮件存储在订单记录中,那么您可以使用my_order.user.email
检索订单的电子邮件,或者...
class Order < ActiveRecord::Base
belongs_to :user
delegate :email, to: :user
...
end.
哪个会让你做...
my_order.email
...不需要 Order 模型中的属性。
..