0

モデルTopic内:

class Topic < ActiveRecord::Base
  has_many :choices, :dependent => :destroy
  accepts_nested_attributes_for :choices
  attr_accessible :title, :choices
end

POST 作成中に、Rails が期待するのではなく、params送信されたものが であり、エラーが発生します。:choices:choices_attributes

ActiveRecord::AssociationTypeMismatch (Choice(#70365943501680) expected,
got ActiveSupport::HashWithIndifferentAccess(#70365951899600)):

JSON呼び出しの代わりにaccepts_nested_attributes_forパラメータを渡すように設定する方法はありますか?choiceschoices_attributes

現在、コントローラーで属性の作成を行いました(これはエレガントなソリューションではないようです):

  def create
    choices = params[:topic].delete(:choices)
    @topic = Topic.new(params[:topic])
    if choices
      choices.each do |choice|
        @topic.choices.build(choice)
      end
    end
    if @topic.save
      render json: @topic, status: :created, location: @topic
    else
      render json: @topic.errors, status: :unprocessable_entity
    end
  end
4

3 に答える 3

0
  # Adds support for creating choices associations via `choices=value`
  # This is in addition to `choices_attributes=value` method provided by
  # `accepts_nested_attributes_for :choices`
  def choices=(value)
    value.is_a?(Array) && value.first.is_a?(Hash) ? (self.choices_attributes = value) : super
  end
于 2014-08-20T18:13:51.733 に答える
0

choices=モデルでメソッドを次のように作成できます

def choices=(params)
  self.choices_attributes = params
end

ただし、選択肢の関連付けのセッターを壊します。

最良の方法は、choices_attributes代わりに返すようにフォームを変更することですchoices

于 2012-06-18T08:42:05.780 に答える