在我的Rails 5应用程序中,我试图在控制器中执行此操作:
def create
company_params = params.require(:company).permit(
:name,
:email,
:people_attributes => [
:first_name,
:last_name
]
).deep_merge(
:creator_id => current_user.id,
:people_attributes => [
:creator_id => current_user.id
]
)
@company = current_account.companies.build(company_params)
if @company.save
flash[:success] = "Company created."
redirect_to companies_path
else
render :new
end
end
由于某种原因,我遇到此错误:
ActionController :: Parameters:0x007fa24c39cfb0的未定义方法'deep_merge'
我在这里想念什么?
答案 0 :(得分:3)
我在这里想念什么?
该params
是ActionController::Parameters
的一个实例。它不是哈希。不过,它具有 some 合并方法。
params.methods.grep(/merge/)
=> [:reverse_merge!, :reverse_merge, :merge!, :merge]
如果您想要deep_merge
,请以某种方式将参数转换为哈希。
答案 1 :(得分:0)
尽管在请求周期中修改参数不是一个好习惯,但是如果您要这样做,总是有一个.to_hash.deep_merge
选项供您从参数实例中检索散列。
答案 2 :(得分:0)
好的,我无法deep_merge
上班,所以我最终这样做了:
def create
company_params = params.require(:company).permit(
:name,
:email,
:people_attributes => [
:first_name,
:last_name
]
)
@company = current_account.companies.build(company_params)
@company.creator = current_user
@person = @company.people.last
@person.account = current_account
@person.creator = current_user
if @company.save
flash[:success] = "Company created."
redirect_to companies_path
else
render :new
end
end
不确定这是好方法还是坏方法。反馈表示赞赏!