1

私の完全なエラーメッセージは次のとおりです。

ActiveModel::MassAssignmentSecurity::WorkoutsController#create のエラー保護された属性を一括割り当てできません:workout_entry

私が送信しているパラメーターは次のようになります。

{"workout"=>{"unit"=>"kg", "name"=>"2013-02-20T21:26:19", "note"=>nil, "workout_entry"=> [{"workout_entry_number"=>"1", "exercise_id"=>2, "entry_detail"=>[{"set_number"=>"1", "weight"=>"32", "reps"=>"43"}]}]}}

多くのワークアウト エントリを持つワークアウトがあり、各ワークアウト エントリには多くのエントリの詳細を含めることができます。メモはオプションです。

ワークアウト.rb

class Workout < ActiveRecord::Base
    has_many :workout_entries, dependent: :destroy

    attr_accessible :id, :name, :note, :unit, :workout_entries_attributes
    belongs_to :user
    accepts_nested_attributes_for :workout_entries

    validates_presence_of :name
    validates_presence_of :unit, :inclusion => %w(kg lb)
    validates_associated :workout_entries

    default_scope order("created_at DESC")

end

ワークアウト_エントリー.rb

class WorkoutEntry < ActiveRecord::Base

    belongs_to :workout
    belongs_to :exercise
    has_many :entry_details, dependent: :destroy

    attr_accessible :workout_id, :exercise_id, :workout_entry_number, :entry_details_attributes
    accepts_nested_attributes_for :entry_details

    validates :exercise_id, presence: true, numericality: {only_integer: true}, :inclusion => { :in => 1..790 }
    validates :workout_id, presence: true, numericality: {only_integer: true, greater_than_or_equal_to: 1}
    validates :workout_entry_number, presence: true, numericality: {only_integer: true, greater_than_or_equal_to: 1}

end

ワークアウト_コントローラー.rb

class WorkoutsController < ApplicationController
    respond_to :json
    before_filter :authenticate_user!

    def index
        respond_with(current_user.workouts)
    end

    def show
        respond_with(current_user.workouts.find(params[:id]))
    end

    def create
        respond_with(current_user.workouts.create(params[:workout]))
    end

    def update
        @workout = current_user.workouts.find(params[:id])
        if @workout.update_attributes(params[:workout])
          render json: @workout, status: :ok
        else
          render json: @workout.errors, status: :unprocessable_entity
        end
    end

    def destroy
        respond_with(current_user.workouts.destroy(params[:id]))
    end

end

ワークアウト.rb内のattr_accessibleとaccepts_nested_attributes_forの順番を入れ替えてみたのですがうまくいきません。

私も設定しようとしました

config.active_record.whitelist_attributes = true

しかし、作成はまだ妨げられていました。

4

3 に答える 3

0

私は、accepts_nested_attributes_forをworkoutモデルとworkout_entryモデルで使用しないことにしました。これは、私にとっては機能していなかったためです。送信されるjsonの形式も更新しました。詳細は以下のリンクにあります

リンク

于 2013-02-22T07:55:16.723 に答える
0

accepts_nested_attributes_forホワイトリストに属性を追加しません。update_attributes に渡そうとするキーは何でも、attr_accessible にリストする必要があります。この場合は、に追加する必要がありworkout_entryますattr_accessible

fields_for を使用している場合は、フォームにエラーがあるように見えますが、アクセス可能な key を使用する必要workout_entries_attributesがあります。

于 2013-02-21T06:10:46.127 に答える
0

ワークアウト モデルでアクセス可能な attr に、workout_entry_ids を追加してみてください。

于 2013-02-21T06:46:49.843 に答える