【发布时间】:2014-02-19 18:15:51
【问题描述】:
我有以下设计注册表(省略了不相关的标记):
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { id: "payment-form" }) do |f| %>
<%= f.fields_for resource.paid_account do |pa| %>
<%= pa.collection_select :account_plan_id, @account_plans, :id, :name_with_price %>
<% end %>
<% end %>
此表单输出以下 HTML:
<select id="user_paid_account_account_plan_id" name="user[paid_account][account_plan_id]">
<option value="2">Lite ($10.00/mo)</option>
<option value="3">Professional ($20.00/mo)</option>
<option value="4">Plus ($30.00/mo)</option>
</select>
然后我的ApplicationController 中有以下代码:
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(
:email,
:password,
:paid_account => :account_plan_id # <-- THIS IS PROBABLY WRONG
)
end
end
end
当我提交表单时,我得到“PaidAccount(#2163736620) 预期,得到 ActionController::Parameters(#2173083140)”。
我也尝试了以下没有出错的方法,但它也没有创建记录:
u.permit(
:email,
:password,
:paid_account => []
)
我做错了什么?
【问题讨论】:
-
对我来说,它也没有像您尝试的那样工作,我不得不将消毒放在 Devise RegistrationController 中,例如:
def sign_up_params params.require(:user).permit(:email, :password, :password_confirmation, :current_password, ....) end
标签: ruby-on-rails devise strong-parameters