0
我已经使用Devise gem设置了一个应用程序来登录(用户模型)。在注册视图中,iive包括一个simple_fields_for表单,其中包含Student模型的属性。Devise中的嵌套窗体(Rails 3.2) - 不保存
所有内容在视图中都正确显示,但是当单击提交按钮时,不会创建嵌套记录。
用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :role, :student_attributes
# attr_accessible :title, :body
has_one :student, :inverse_of => :user, :autosave => true
accepts_nested_attributes_for :student
end
学生模型
Class Student < ActiveRecord::Base
attr_accessible :course, :email, :fname, :lname, :student_num, :university, :year
set_primary_key :student_num
belongs_to :user, :inverse_of => :student, :autosave => true
has_many :attendances
has_many :teaching_sessions, through: :attendances
has_many :completed_outcomes
validates :student_num, presence: true
validates :fname, presence: true
validates :lname, presence: true
validates :university, presence: true
validates :course, presence: true
validates :year, presence: true
validates :email, presence: true
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Student.create! row.to_hash
end
end
def full_name
"#{fname} #{lname}"
end
end
设计登记表
<h2>Sign up</h2>
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<h3>Login Details</h3>
<div class="form-inputs">
<%= f.input :email, :required => true, :autofocus => true %>
<%= f.input :password, :required => true %>
<%= f.input :password_confirmation, :required => true %>
<%= f.select :role, ["Student","Teacher","Admin"], :required => true %>
</div>
<h3>Profile</h3>
<div id = "student_fields">
<%= simple_fields_for :student do |s| %>
<%= s.input :student_num %>
<%= s.input :fname %>
<%= s.input :lname %>
<%= s.input :university %>
<%= s.input :course %>
<%= s.input :year %>
<% end %>
</div>
<br />
<div class="form-actions">
<%= f.button :submit, "Sign up" %>
</div>
<% end %>
<br />
<%= render "devise/shared/links" %>
定制设计控制器
class Users::RegistrationsController < Devise::RegistrationsController
def new
resource = build_resource({})
resource.build_student
respond_with resource
end
def create
super
end
def update
super
end
end
我几乎读过这里的每篇文章,并且仍然无法找到一种方法来在单击“提交”按钮时获取嵌套模型以进行保存。创建用户记录没有问题,但学生的详细信息不会保存。如果有人有任何建议,我将非常感激。我确信它很简单,我很想念,但我一整天都在摔跤!
最良好的祝愿,
迈克
那frickin真棒的感谢! 我最初尝试过使用f.simple_fields_for,但是这是在一个部分内,并返回一个错误,说“f”没有找到或一些这样的。 非常感谢你!我知道这会很简单。 干杯! Mike –
如果您想将“f”传递给包含'simple_fields_for'输入字段的部分,您可以从<%= render partial:'yourpartialhere',locals:{f:f}%>'从主视图。 – cschroed