【发布时间】:2018-10-02 02:24:14
【问题描述】:
我希望为两个模型创建一个带有输入字段的表单 - 设计用户模型和配置文件模型。我希望使用字段创建配置文件模型,并在创建时引用用户模型。
注册新视图
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<!-- Devise Fields for User model -->
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
<%= f.password_field :password, autocomplete: "new-password" %>
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
<!-- Profile model -->
<%= f.fields_for :profile do |g| %>
<%= g.text_field :first_name %>
<%= g.text_field :last_name %>
<% end %>
<%= f.submit "Sign up" %>
<% end %>
用户模型
has_one :profile, dependent: :destroy
attr_accessor :first_name, :last_name
accepts_nested_attributes_for :profile
个人资料模型
belongs_to :user
应用程序控制器
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [ profile_attributes: [:first_name, :last_name]])
end
设计注册控制器(覆盖)
def new
super do |resource|
resource.build_profile
end
end
这是 Github 上的代码https://github.com/Goeken/Speech-today
我该怎么办?
【问题讨论】:
-
你的控制器里有什么?
-
检查日志中是否有任何未经允许的参数。如果是这样,问题出在 configure_permitted_parameters 方法上。 f.fields_for @user.build_profile 也可以替换为 f.fields_for :profile
-
尝试将
<%= f.fields_for @user.build_profile do |g| %>更改为<%= f.fields_for :profile, @user.build_profile do |g| %> -
输出相同的错误。
-
@Nezir 我有很多字段,我刚才仔细检查了其中两个是 t.string "first_name", t.string "last_name"
标签: ruby-on-rails devise ruby-on-rails-5