2012-03-08 68 views
0

我一直在試圖弄清楚這幾個小時,我已經審查了所有關於SO的類似問題,但似乎沒有任何工作。Rails 3嵌套形式與設計字段不呈現

我有以下形式

註冊/ new.html.erb

 <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <%= f.fields_for :user_roles do |builder| %> 
     <%= builder.hidden_field :role_id, :value => @role.id %> 
    <% end %> 

我已重寫的註冊控制器,像這樣

class Users::RegistrationsController < Devise::RegistrationsController 
    prepend_before_filter :require_no_authentication, :only => [ :new, :create ] 
    layout "public" 

    def new 

    @user = User.new 
    @user.user_roles.build() 
    @role = Role.find_by_name("organiser") 
    super 
    end 

視圖不呈現隱藏的表單,如果我刪除了f變量,那麼user_roles的字段被渲染。

我在新的動作中構建了user_roles的佔位符實例,但這似乎沒有任何區別。我已經設置了accepts_nested_attributes_for :user_roles

無論如何,這是驅使我分心,任何幫助將不勝感激。

回答

0

我已經解決了這個問題,但我不知道它爲什麼起作用。在視圖(**包圍的變化)

<%= f.fields_for **:user_roles, @user_roles** do |builder| %> 
     <%= builder.hidden_field :role_id, :value => @role.id %> 
    <% end %> 

在我色器件註冊在新的動作控制器,我有

def new 
    @user = User.new 
    **@user_roles = [@user.user_roles.build ]** 
    @role = Role.find_by_name("organiser") 
    super 
    end 

我的使用情況如下,我希望在網站上註冊的人員擔任組織者角色,然後他們可以在供應商或成員角色中將其他用戶添加到系統中。爲了處理在應用程序內創建用戶,我有一個用戶控制器,允許組織者將用戶添加到特定角色。

在爲users_controller新動作的代碼是:

def new 
    @user = @wedding.users.new 
    @roles = @wedding.roles 
    1.times{ @user.user_roles.build() } 
    end 

在用戶的嵌套形式/ new.html.haml是:

= f.fields_for :user_roles do |builder| 
     %p 
     = f.label :roles 
     = builder.select(:role_id, options_for_select(@roles.map {|role| [role.name, role.id]})) 

問題是此代碼的工作,當我試圖將它複製到註冊控制器中,它不起作用。我不明白爲什麼,任何建議,將不勝感激。

希望這是有幫助的。