2010-02-15 15 views
0

我有一個需要放置在許多不同頁面上的嵌套屬性窗體。不一定是它所屬的模型。 所以我在這個營的展示頁面上有這個表單。用戶信息創建得很好,但用戶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,然後使用戶嵌套和角色嵌套,這是三個層次,只是看起來不正確。

任何幫助將不勝感激。

回答

0

在處理accep_nested_attributes_for時,您需要分配給「#{關聯} _屬性」。在你的情況下,你想要roles_attributes。

fields_for與accept_nested_attributes_for結合使用時應生成正確的HTML。

您的意見/部分似乎是正確的,但您的隱藏字段不會生成正確的輸入ID。

我已經能夠重現您的問題的唯一方法是@user爲零時。在使用此表單之前,是否有機會忘記初始化用戶?在多個頁面上使用相同的部分時,忽略它並不難。

只要確保在呈現此表單的所有控制器操作中執行@user = User.new。

+0

感謝您的幫助。在用戶模型中,我有accep_nested_attributes_for:roles,:allow_destroy => true,是不夠的?似乎它在應用程序中的其他嵌套窗體。 我需要在哪裏分配「#{關聯} _屬性」?我認爲問題不在用戶,因爲我創建的用戶很好,只是沒有相關的角色。即使當我嘗試從用戶模型中直接執行此操作時,我也遇到同樣的問題。我正在使用Authlogic創建我的新用戶,我想知道它是否可以與此有關?感謝你看着它。 – looloobs 2010-02-15 21:35:09

+0

還有一件事: 當我創建一個新的用戶時,這是發生了什麼,我不知道爲什麼這個「角色」=>「#」在那裏? 處理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

+0

無論何時您創建或更新用戶,並打算直接修改相關角色,您都將分配給roles_attributes。當您使用accepts_nested_attributes_for時,您在使用fields_for時會自動完成此操作。如果您檢查渲染視圖的來源,您將在輸入名稱中看到它。 – EmFi 2010-02-15 22:15:12

相關問題