9

nested_attributes を実装しようとしていますが、スケジュールの作成が機能しています。しかし、エラーを出さずに編集すると失敗します。1 対 1 の関係では機能しますが、 1 対多では機能しません。このドキュメントに記載されているように、スケジュールの ID を渡しています: NestedAttributes

私はこれらのモデルを持っています:

class Article < ActiveRecord::Base
  has_many :schedules

  accepts_nested_attributes_for :schedules
end

class Schedule < ActiveRecord::Base
  belongs_to :article
end

強力なパラメーターをホワイトリストに登録するためのコントローラーのスニペットを次に示します。

def article_params
  params.require(:article).permit(schedules_attributes: [ :id, :schedule_for, :content, :time_zone, :date, :time ])
end

そして、ここに私がレールコンソールで試したサンプルがあります:

article_params = {"schedules_attributes"=>{"0"=>{"schedule_for"=>"pre", "content"=>"This is a scheduled message for ETS - !!!!!!!", "time_zone"=>"American Samoa", "date"=>"2013-10-20", "time"=>"11:15 AM", "id"=>"1"}}}

article = Article.find(1)

article.update(article_params)

D, [2013-10-25T16:42:50.266517 #2296] DEBUG -- :    (0.1ms)  BEGIN
D, [2013-10-25T16:42:50.267789 #2296] DEBUG -- :   Schedule Load (0.3ms)  SELECT "schedules".* FROM "schedules" WHERE "schedules"."article_id" = $1 AND "schedules"."id" IN (1)  [["article_id", 1]]
D, [2013-10-25T16:42:50.273288 #2296] DEBUG -- :    (0.3ms)  COMMIT

正しいスケジュールを選択しましたが、更新クエリを実行せず、エラーもありませんでした。ここで何か不足していますか?

編集:

Ruby 2.0 と Rails 4 を使用しています。

4

6 に答える 6

0

ネストされた関連付けについては、この PRO railscasts を参照してください...ネストされた関連付けについては、その素晴らしいRAILSCASTS PRO エピソード

于 2014-06-10T10:34:45.430 に答える
0

ここにあなたのためのいくつかのアイデアがあります:

def article_params
  schedules_attributes: [ :id, :schedule_for, :content, :time_zone, :date, :time ]
end

次のようにする必要があります。

def article_params
    params.require(:article).permit(schedules_attributes: [ :id, :schedule_for, :content, :time_zone, :date, :time ])
end
于 2013-10-26T13:01:35.517 に答える
0

ここでの問題は、強力なパラメーターをaccepts_nested_attributes_for正しく使用していないようです。

試してみませんか

モデル

accepts_nested_attributes_for :schedules

コントローラーファイル

def article_params
    params.require(:article).permit(:my, :attributes, :schedules: [:schedule, :whitelist])
end

@article.update_attributes!(article_params)

レールが強力なパラメーターを必要とaccepts_nested_attributes_forし、このように動作することは私にはばかげていますが、何かが足りないのかもしれません。

また、 で使用.update_attributes!してみてください!。これにより、レールにエラーが発生するように指示されるため、何が起こっているかがわかります。

あなたはarticle[schedules_attributes][0][schedule_for]あなたのために持っています、私はこれについて100%肯定的ではありませんが、これはparams[:article][:schedules_attributes_0][schedule_for]として送信されると信じています

入れてみませんかarticle[schedule_attributes][][attribute_name]

于 2013-10-26T05:38:56.600 に答える