Ruby on rails 4 设计用户的嵌套表单
我已经设计好并运行了,一切正常,我正在尝试Ruby on rails 4 设计用户的嵌套表单,ruby-on-rails-4,devise,nested-forms,nested-attributes,Ruby On Rails 4,Devise,Nested Forms,Nested Attributes,我已经设计好并运行了,一切正常,我正在尝试接受用户模型的嵌套属性。我生成了一个名为degree的模型: rails g model Degree university:string course:string level:string user:references rake db:migrate 表单显示正确,但没有数据保存到数据库?在rails控制台中,我运行了: Degree.all 查看是否保存了任何数据,但我什么也没有得到 注册_controller.rb: class Users
接受用户
模型的嵌套属性。我生成了一个名为degree的模型:
rails g model Degree university:string course:string level:string user:references
rake db:migrate
表单显示正确,但没有数据保存到数据库?在rails控制台中,我运行了:
Degree.all
查看是否保存了任何数据,但我什么也没有得到
注册_controller.rb:
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation,
:fname, :mname, :lname, :twitterLink, :githubLink, :stackoverflowLink, :dribbleLink, :mediumLink, degree_attributes: [:university, :course, :level]) }
#devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:fname, :mname, :password, :current_password, :lname) }
end
end
类用户::注册控制器<设计::注册控制器
在\u过滤器之前:配置\u允许的\u参数,如果::设计\u控制器?
受保护的
def配置\u允许的\u参数
为(:注册){许可证(:电子邮件,:密码,:密码确认,
:fname,:mname,:lname,:twitterLink,:githubLink,:stackoverflowLink,:dribbleLink,:mediumLink,学位属性:[:大学,:课程,:水平])
#为(:帐户更新){u许可证(:fname,:mname,:password,:current_password,:lname)}设计参数
结束
结束
模型
class Degree < ActiveRecord::Base
belongs_to :user
end
----------------------------------
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :degrees
accepts_nested_attributes_for :degrees
end
等级
嵌套属性所在的窗体:
<h2>Sign up</h2>
<% resource.degrees.build %>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>
<div class="field">
<%= f.fields_for :degree do |degree_fields| %>
<%= degree_fields.label :university %>
<%= degree_fields.text_field :university %><br>
<%= degree_fields.label :course %>
<%= degree_fields.text_field :course %><br>
<%= degree_fields.label :level %>
<%= degree_fields.text_field :level %><br>
<% end %>
</div>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
注册
(最少字符)
度控制器.rb
class DegreeController < ApplicationController
def new
@user = User.new
@user.degrees.build(degree_params)
end
def create
@user.degrees.build(degree_params)
end
private
def degree_params
params.require(:degree).permit(:university, :degree, :level)
end
end
class DegreeController