2012-11-28 41 views
1

我是RoR的新手,我想我可以問你一些幫助。我沒有找到我正在尋找的具體答案。RoR:與設計的嵌套表單

我有一個模型化問題,我想使用Devise。 Devise設立了一個會員模型,我想要有一個SuperMember模型,它具有比Member更多的屬性,以及一些不同的視圖。

我想設置一個嵌套窗體來創建一個SuperMember,同時在後臺自動創建成員帳戶。

Member.rb(由色器件產生)

class Member < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable 
    attr_accessible :email, :password, :password_confirmation, :remember_me 
end 

SuperMember.rb

class Supermember < ActiveRecord::Base 
    attr_accessible :first_name, :last_name 
    belongs_to :member, :dependent => :destroy 
    accepts_nested_attributes_for :member 
end 

Supermembers.controllers.rb

def new 
@supermember = Supermember.new 
    @supermember.member = Supermember.build 

    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @supermember } 
    end 
end 

def create 
    @supermember = Supermember.new(params[:supermember]) 

    respond_to do |format| 
    if @supermember.save 
    format.html { redirect_to @supermember, notice: 'Supermember was successfully created.' } 
    format.json { render json: @supermember, status: :created, location: @supermember } 
    else 
    format.html { render action: "new" } 
    format.json { render json: @supermember.errors, status: :unprocessable_entity } 
    end 
end 

我試圖創建以嵌套的形式生成會員和超級會員:

<%= simple_form_for(@supermember) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :first_name %> 
    <%= f.input :last_name %> 
    </div> 

    <% # Devise member %> 
    <%= f.fields_for :member do |m| %> 
    <div class="form-inputs"> 
    <%= m.input :email, :required => true, :autofocus => true %> 
    <%= m.input :password, :required => true %> 
    <%= m.input :password_confirmation, :required => true %> 
    </div> 
    <% end %> 

    <div class="form-actions"> 
    <%= f.button :submit %> 
    </div> 
<% end %> 

的問題是,當我提出這種形式,我得到了以下錯誤消息:

Can't mass-assign protected attributes: member_attributes 

Application Trace | Framework Trace | Full Trace 
    app/controllers/supermembers.rb:44:in `new' 
    app/controllers/supermembers.rb:44:in `create' 

我真的不知道如何解決它。你能幫我解決這個問題嗎? 非常感謝!

+0

歡迎來到SO。您選擇答案時不需要更新標題,只需標記答案 - http://meta.stackexchange.com/a/5235/181382 – mguymon

回答

2

您需要允許超級會員,接受會員的質量分配屬性

class Supermember < ActiveRecord::Base 
    attr_accessible :first_name, :last_name, :member_attributes 
    ... 
end 
+0

非常感謝!你有我的解決方案;-) –

0

如果你想要做的是將屬性添加到成員,那麼也完全可以這樣做。沒有必要爲此目的創建一個超級會員(當然,如果你有其他的議程,然後繼續...)。

設備不在乎是否向模型添加屬性,即使它是由其生成的。