[英]Save current_user email data from devise ruby on rails. When creating a Order
感谢您抽出宝贵时间为我提供帮助。
当客户创建新订单时,我希望能够保存current_user设计数据。 我可以找到所有内容,然后设法保存了user_id,但没有保存我需要的东西,例如电子邮件。 我将密切关注这篇文章。
为了澄清起见,我需要在提交表单时保存帐户数据,以避免让用户再次添加数据(如电子邮件名)。 此数据已保存在devise用户帐户上。 所以我想用那是提交的形式提交。
我在orders_controller.rb中看到了这样的事情
def create
@order = current_user
end
但这根本不保存任何数据。 当我在这篇文章的底部执行此操作时,您可以看到控制台输出。 是零。
楷模:
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模型中的属性。
..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.