2
belongs_to的幾個型號我有幾個型號 - 用戶,教師和TeacherLeader。的Rails 3 - 節能模型,通過嵌套屬性
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :user_login,
:password,
:teacher_attributes,
:teacher_leader_attributes
has_one :teacher
has_one :teacher_leader
accepts_nested_attributes_for :teacher_leader
end
class Teacher < ActiveRecord::Base
belongs_to :user
has_one :teacher_leader
end
class TeacherLeader < ActiveRecord::Base
belongs_to :user
belongs_to :teacher
end
我想數據TeacherLeader通過嵌套的屬性保存。所以,在用戶模型我加了accepts_nested_attributes_for :teacher_leader
和attr_accessible :teacher_leader_attributes
。
另外我有控制器:
class TeacherLeadersController < ApplicationController
def new
...
@user = User.new
@teacher_leader = @user.build_teacher_leader
@teachers_collection = Teacher.all
.collect do |t|
[ "#{t.teacher_last_name} #{t.teacher_first_name} #{t.teacher_middle_name}", t.id ]
end
@choosen_teacher = @teachers_collection.first.last unless @teachers_collection.empty?
end
def create
user = User.new(params)
user.user_role = "class_head"
if user.save
flash[:success] = "Successfully created class head!"
else
flash[:error] = user.errors.full_messages
end
end
end
另外II已視圖TeacherLeader控制器(new.html.erb):
<%= form_for @user, :url => teacher_leaders_url, :html => {:class => "form-horizontal"} do |f| %>
<%= field_set_tag do %>
<%= f.fields_for :teacher_leader do |tl| %>
<div class="control-group">
<%= tl.label :teacher_id, "Teacher names", :class => "control-label" %>
<div class="controls">
<%= select_tag(:teacher_id,
options_for_select(@teachers_collection, @choosen_teacher)) %>
</div>
</div>
<% end %>
<div class="control-group">
<%= f.label :user_login, "Login", :class => "control-label" %>
<div class="controls">
<%= f.text_field :user_login %>
</div>
</div>
<div class="control-group">
<%= f.label :password, "Pass", :class => "control-label" %>
<div class="controls">
<%= f.text_field :password %>
</div>
</div>
<% end %>
<%= f.submit "Create", :class => "btn btn-large btn-success" %>
當我試圖保存我的模型,我得到奇怪的錯誤,如「用戶登錄不能爲空」等。我知道用戶模型的驗證會生成它們(我不知道爲什麼,即使有params中的值,我也會得到這樣的錯誤)。我想,是我做錯事的觀點,因爲submiting後,我有這樣的PARAMS:
teacher_id: '1'
user: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
user_login: schoolh_1rF32
password: txaqxuTXz96auhX
commit: Create
action: create
controller: teacher_leaders
但我應該有這樣的事情:
user: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
user_login: schoolh_1rF32
password: txaqxuTXz96auhX
teacher_leader_attributes:
teacher_id: '1'
有什麼不對?我能解決這個問題嗎?
UPD:類頭部特寫創建網頁的HTML代碼:
<form accept-charset="UTF-8" action="http://0.0.0.0:3000/teacher_leaders" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="ZKlDTKG8SU8fZuMrUfQoCOSGknOhj651DT2LJDrfliA=" /></div>
<fieldset>
<div class="control-group">
<label class="control-label" for="user_teacher_leader_attributes_teacher_id">Teacher names</label>
<div class="controls">
<select id="teacher_id" name="teacher_id">
<option value="1" selected="selected">Jack P. Tompson </option>
<option value="2">Ronald V. Herwud</option>
</div>
</div>
<div class="control-group">
<label class="control-label" for="user_user_login">Login</label>
<div class="controls">
<input id="user_user_login" name="user[user_login]" size="30" type="text" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="user_password">Password</label>
<div class="controls">
<input id="user_password" name="user[password]" size="30" type="text" />
</div>
</div>
</fieldset>
<input class="btn btn-large btn-success" name="commit" type="submit" value="Create" />
</form>
你能告訴你的形式,呈現HTML? – MikDiet 2012-04-04 13:44:41
@Mik_Die我添加了代碼。你能再次檢查我的帖子嗎? – ExiRe 2012-04-04 13:50:51