1

私はRoRを初めて使用するので、助けを求めることができると思いました。探している具体的な答えが見つかりませんでした。

Deviseを使用して作成したいモデル化に問題があります。DeviseはMemberモデルを設定します。私は、Memberよりも多くの属性といくつかの異なるビューを持つSuperMemberモデルが必要です。

バックグラウンドでメンバーアカウントを自動的に作成しながら、スーパーメンバーを作成するためのネストされたフォームを設定したいと思います。

Member.rb(deviseによって生成された)

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'

私はそれを修正する方法を本当に理解していません。これについて手伝ってくれませんか。どうもありがとうございます!

4

2 に答える 2

2

スーパーメンバーがメンバー属性の一括割り当てを受け入れることを許可する必要があります

class Supermember < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :member_attributes
  ...
end
于 2012-11-28T16:33:03.477 に答える
0

メンバーに属性を追加しようとしているのであれば、それはまったく問題ありません。その目的のためだけにスーパーメンバーを作成する必要はありません(もちろん、他の議題がある場合は先に進んでください...)。

モデルによって生成された場合でも、デバイスはモデルに属性を追加してもかまいません。

于 2012-11-28T16:37:27.887 に答える