4

一般的なエラー ( attr_accessible のタイプミス完全な省略など) を回避したような気がするので、これには少し困惑していますが、まだエラーが発生しています。

Can't mass-assign protected attributes: home, work

ここでエラー。私は何かが欠けていると思いますが、何がわかりません。

いずれにせよ、私の新しいアプリでは、ユーザーには 1 つのホームと 1 つのワーク (それぞれがユーザーに属します) があり、サインアップ時にユーザーにそれらを入力してもらいます。だから、私のモデルでは:

user.rb

attr_accessible :email, :first_name, :last_name, :password, :password_confirmation, :home_attributes, :work_attributes

  has_one :home, :work

  accepts_nested_attributes_for :work, :home

  has_secure_password

ホーム.rb

attr_accessible :address, :latitude, :longitude, :user_id
belongs_to :user

validates :address, presence: true

work.rb

attr_accessible :address, :latitude, :longitude, :user_id
belongs_to :user

validates :address, presence: true

私のコントローラーで

users_controller.rb

def new
    @user = User.new

  respond_to do |format|
    format.html # new.html.erb
    format.json { redirect_to @user }
  end
end

そして私の形で:

ビュー/ユーザー/_form.html.haml

= form_for @user do |f|
  - if @user.errors.any?
    .error_explanation
      %h2
        = pluralize(@user.errors.count, "error") 
        prohibited this post from being saved:
      %ul
        - @user.errors.full_messages.each do |msg|
          %li= msg

  = f.label :first_name
  = f.text_field :first_name

  = f.label :last_name
  = f.text_field :last_name

  = f.label :email
  = f.text_field :email

  = f.label :password
  = f.password_field :password

  = f.label :password_confirmation, "Re-Enter Password"
  = f.password_field :password_confirmation

  = f.fields_for :home do |builder|
    = builder.label :address, "Home address"
    = builder.text_field :address
  %br
  = f.fields_for :work do |builder|
    = builder.label :address, "Work address"
    = builder.text_field :address

  .btn-group
    = f.submit 'Sign Up!', class: "btn"
4

1 に答える 1

3

これらの属性を含めるようにインスタンス変数を設定していないようです。

あなたのコントローラーにはこのようなものがあるはずです

def new
    @user = User.new
    @user.homes.build
    @user.works.build

  respond_to do |format|
    format.html # new.html.erb
    format.json { redirect_to @user }
  end
end

これらの属性を作成しないと、フォームは何をすべきかわかりません。

編集:ネストされたリソースを構築するための固定構文

于 2013-03-23T01:45:16.493 に答える