我正在尝试进行表单提交,其中new方法初始化变量,而在create方法中,变量应该保存到模型中。但是在create方法中,我得到的变量为零。所以我最终也在create方法中创建了变量。任何人都可以帮助我了解正在发生的事情。
这是我的代码
class AddressesController < ApplicationController
def new
byebug
@addr = Address.new
end
def create
@addr = Address.new
byebug
user = {}
user[:user_id] = StudioOrder.find_by(user_id: spree_current_user.id).user_id
@addr.update_attributes(user)
@addr.update_attributes(getparams)
byebug
@addr.save
end
def getparams
params.require(:address).permit(:user_id, :name, :address, :mobile, :city, :state, :pincode)
end
end
答案 0 :(得分:1)
您正在谈论的变量是@addr
这是完全正常的。它是为AddressesController类的THAT INSTANCE定义的变量。
当create方法执行时,它是AddressesController类的一个新实例,并且无法访问前一个实例的实例变量。
关于这条线......
user[:user_id] = StudioOrder.find_by(user_id: spree_current_user.id).user_id
它可以大大简化为
user[:user_id] = spree_current_user.id
无论如何,你的控制器动作的简化版本可能是......
def new
@addr = Address.new
end
def create
@addr = Address.new
@addr.assign_attributes(getparams)
@addr.user = spree_current_user
if @addr.save
flash[:notice] 'save successful'
redirect_to root_path
else
flash.now[:error] 'please correct errors below'
render :new
end
end
答案 1 :(得分:0)
假设spree_current_user
has_many :addresses
并且必须存在才能到达地址控制器,您可以
def create
@addr = spree_current_user.addresses.new(get_params)
if @addr.save
flash[:notice] 'save successful'
redirect_to root_path
else
flash.now[:error] 'please correct errors below'
render :new
end
end