RoRアプリを開発していて解決できない問題に遭遇しました。UserとTeacherの2 つのモデルがあります。
class User < ActiveRecord::Base
...
has_one :teacher
accepts_nested_attributes_for :teacher
end
class Teacher < ActiveRecord::Base
...
belongs_to :user
end
また、ユーザーと教師のデータを埋めるためのフォームを表示しています。このフォームからデータを送信した後、コントローラーの別のメソッドであるcreate_teacherに入ります。また、私は他のメソッドnew_teacherを持っています。このメソッドには、フォームを含むビューがあります。
class AdminsController < ApplicationController
def new_teacher
@user = User.new
teacher = @user.build_teacher
end
def create_teacher
params[:user][:user_role] = "teacher"
user = User.new(params[:user])
if user.valid?
user.save
teacher = user.build_teacher( params[:user][:teacher_attributes] )
if teacher.valid?
teacher.save
redirect_to admins_users_of_system_path
flash[:success] = "Teacher created!"
else
redirect_to admins_new_teacher_path
flash[:error] = teacher.errors.full_messages.to_sentence
user.destroy
end
else
redirect_to admins_new_teacher_path
flash[:error] = user.errors.full_messages.to_sentence
end
end
end
私の見解new_teacher.html.erb
<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
<%= field_set_tag do %>
<%= f.fields_for :teacher do |builder| %>
<div class="control-group">
<%= builder.label :teacher_last_name, "Last name", :class => "control-label" %>
<div class="controls">
<%= builder.text_field :teacher_last_name %>
</div>
</div>
...
<% end %>
<div class="control-group">
<%= f.label :user_login, "Login", :class => "control-label" %>
<div class="controls">
<%= f.text_field :user_login, :value => "" %>
<%= link_to_function "Generate login", "generate_login()", :class => "btn" %>
</div>
</div>
...
<% end %>
<%= f.submit "Create", :class => "btn btn-large btn-success" %>
<% end %>
2 つの質問があります。
1) すべてのエラーを表示するにはどうすればよいですか (ユーザーと教師の場合)? それは可能ですか?
2) create_teacherメソッドからadmins_new_teacher_pathにリダイレクトするときに、データをフォームに保持することは可能ですか?