我有一個需要放置在許多不同頁面上的嵌套屬性窗體。不一定是它所屬的模型。 所以我在這個營的展示頁面上有這個表單。用戶信息創建得很好,但用戶has_many角色並沒有創建這些屬性。我有許多其他嵌套的表單,工作得很好,我不能完全弄清楚我錯過了什麼來完成這項工作。在整個應用程序的許多頁面上放置的嵌套窗體
class User < ActiveRecord::Base
has_many :roles
accepts_nested_attributes_for :roles, :allow_destroy => true
def active?
active
end
def activate!(params)
self.active = 1
self.login = params[:user][:login]
self.password = params[:user][:password]
self.password_confirmation = params[:user][:password_confirmation]
save
end
def deliver_activation_instructions!
reset_perishable_token!
NotifierMailer.deliver_activation_instructions(self)
end
def deliver_activation_confirmation!
reset_perishable_token!
NotifierMailer.deliver_activation_confirmation(self)
end
def has_no_credentials?
self.crypted_password.blank?
end
def signup!(params)
self.login = params[:user][:login]
self.email = params[:user][:email]
self.name = params[:user][:name]
self.position = params[:user][:position]
self.battalion_id = params[:user][:battalion_id]
self.company_id = params[:user][:company_id]
self.platoon_id = params[:user][:platoon_id]
save_without_session_maintenance
end
end
class Role < ActiveRecord::Base
belongs_to :user
end
<% form_for :user, @user, :url => users_path do |f| %>
<%= f.error_messages %>
<% f.fields_for :roles do |f| %>
<%= render :partial => "role", :locals => { :f => f, :role => 'battalion'} %>
<% end %>
<%= render :partial => "form", :locals => { :f => f, :position => 'Battalion Commander', :company => 'nil'} %>
<%= f.submit "Register" %>
<% end %>
_role.html.erb
<%= f.hidden_field(:name, :value => role) %>
_form.html.erb
<%= f.hidden_field(:position, :value => position) %>
<%= f.hidden_field(:battalion_id, :value => @battalion.id) %>
<%= f.hidden_field(:company_id, :value => company) %>
<%= f.label(:name, "Name:") %>
<%= f.text_field :name%>
<br />
<%= f.label(:email, "E-Mail:") %>
<%= f.text_field :email%>
<br />
這是當我創建的用戶會發生什麼:
處理UsersController#創建(對於127.0.0.1在2010-02-14 22:15:16)[POST] 參數:{「user」=> {「name」=>「Chirs」,「roles」=> {「name」=>「營」},「company_id」=>「無」,「職位」=>「營指揮官」,「電子郵件」=>「[email protected]」,「battalion_id」=>「1 「},」commit「=>」Register「,」action「=>」create「,」authenticity_token「=>」PcGbsQNG7wKKPDZTM + JGry/a1aBWZuoyaCNwlqlCJ0g =「,」controller「=>」users「}
我只是不會觸發角色的創建操作。
看起來這應該是非常簡單的,我唯一的猜測就是讓它從用戶模型中移出來造成問題。它應該是form_for @battalions,然後使用戶嵌套和角色嵌套,這是三個層次,只是看起來不正確。
任何幫助將不勝感激。
感謝您的幫助。在用戶模型中,我有accep_nested_attributes_for:roles,:allow_destroy => true,是不夠的?似乎它在應用程序中的其他嵌套窗體。 我需要在哪裏分配「#{關聯} _屬性」?我認爲問題不在用戶,因爲我創建的用戶很好,只是沒有相關的角色。即使當我嘗試從用戶模型中直接執行此操作時,我也遇到同樣的問題。我正在使用Authlogic創建我的新用戶,我想知道它是否可以與此有關?感謝你看着它。 – looloobs 2010-02-15 21:35:09
還有一件事: 當我創建一個新的用戶時,這是發生了什麼,我不知道爲什麼這個「角色」=>「#」在那裏? 處理UsersController#create(對於127.0.0。1在2010-02-15 15:30:52)[POST] 參數:{「user」=> {「name」=>「John Jones」,「roles」=>「#」, 「roles_attributes」=> {「0」=> {「name」=>「battalion」}},「company_id」=>「」,「login」=>「jjones2」,「platoon_id」=>「」,「position 「=>」「,」email「=>」[email protected]「,」battalion_id「=>」「},」commit「=>」Register「,」action「=>」create「,」authenticity_token「= >「PcGbsQNG7wKKPDZTM + JGry/a1aBWZuoyaCNwlqlCJ0g =」,「controller」=>「users」} –
looloobs
2010-02-15 21:39:11
無論何時您創建或更新用戶,並打算直接修改相關角色,您都將分配給roles_attributes。當您使用accepts_nested_attributes_for時,您在使用fields_for時會自動完成此操作。如果您檢查渲染視圖的來源,您將在輸入名稱中看到它。 – EmFi 2010-02-15 22:15:12