我正在使用devise,我为用户信息(用户名,名字,姓氏,地址等)构建了另一个表。我想要做的是当用户点击他的个人资料设置(用户模型 - > edit.html.erb视图)以显示user_info表中属性的输入字段时。
class User < ActiveRecord::Base
has_one :user_info
和
class UserInfo < ActiveRecord::Base
belongs_to :user
我的表格似乎是这样的:
<%= form_for(@user) do |f| %>
<%= f.label :username %>
<%= f.text_field :username, :placeholder => "Enter username",
<%= f.label :email %>
<%= f.text_field :email, :placeholder => "Enter email" %>
和控制器
def edit
@user = User.find(params[:id])
@user_info = current_user.user_info
end
当然这不起作用,因为username不是用户的属性,而是user_info表。如果我决定打印它,@ user.user_info.username可以工作,但如果我想显示并保存特定嵌套表单的字段呢?大多数SO回复都提到了如何使用嵌套表单的属性呈现部分,但我希望能够根据需要在我想要的地方打印其中的一个或两个。
答案 0 :(得分:0)
您可以使用相同的表User,并覆盖Devise。
将您的信息迁移到您的用户表
rails g migration add_username_to_users username:string
rake db:migrate
为Devise生成视图
rails g devise:views
将参数添加到Devise
在你的application_controller.rb
中
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:username,
:email,
:password,
:password_confirmation,
:remember_me) }
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:username,
:email,
:password,
:password_confirmation,
:current_password) }
end
end
在/views/registrations/edit.html.erb和/views/registrations/new.html.erb
中添加字段
<%= f.label :username %>
<%= f.input :username %>