6

ちょっとした場所で、Railsのことは初めてです。

モデルの 1 つは、has_many/belongs_to 関連付けで他のモデルに依存しています。

基本的に、アプリケーションで「投稿」を作成する場合、ユーザーは「画像」も添付できます。理想的には、これらは 2 つの別個のモデルです。ユーザーが写真を選択すると、一部の JavaScript がそれを Cloudinary にアップロードし、返されたデータ (ID、幅、高さなど) は JSON 文字列化され、隠しフィールドに設定されます。

# The HTML
= f.hidden_field :images, :multiple => true, :class => "image-data"

# Set our image data on the hidden field to be parsed by the server
$(".image-data").val JSON.stringify(images)

そしてもちろん、関係は私の Post モデルに存在します

has_many :images, :dependent => :destroy
accepts_nested_attributes_for :images

と私の画像モデル

belongs_to :post

Post コントローラの create メソッドでシリアライズされた画像データをどうするか迷っています。JSON を解析して保存するだけでは、保存時にデータを使用して画像モデルが作成されません (そして、正しくないと感じます)。

params[:post][:images] = JSON.parse(params[:post][:images])

これらはすべて、基本的に次のパラメータのようなものになります。

{"post": {"title": "", "content": "", ..., "images": [{ "public_id": "", "bytes": 12345, "format": "jpg"}, { ..another image ... }]}}

このプロセス全体は少し複雑に思えます -- どうすればいいですか? また、最初にやろうとしていることを行うためのより良い方法はありますか? (また、このようなネストされた属性には強力なパラメーターが必要ですか...?)

編集:

この時点で、次のエラーが発生しました。

Image(#91891690) expected, got ActionController::Parameters(#83350730)

この線から来る...

@post = current_user.reviews.new(post_params)

ネストされた属性から画像を作成していないようですが、期待されています。( :autosave があるかどうかに関係なく同じことが起こります)。

4

3 に答える 3

6

その ActionController::Parameters エラーでこの問題が発生しました。次のように、posts_controller で必要なすべてのパラメーターを許可していることを確認する必要があります。

def post_params
  params.fetch(:post).permit(:title, :content,
                             images_attributes: [:id, :public_id, :bytes, :format])
end

image.id 属性を許可していることを確認することが重要です。

于 2013-12-08T21:04:21.760 に答える
0

がこれaccepts_nested_attributes_forを処理する必要があります。そのPost.create(params[:post])ため、ネストされた画像属性も処理する必要があります。autosavehas_many 関係で を指定していないことが原因である可能性があります。したがって、これが違いを生むかどうかを確認したい場合があります。

has_many :images, :dependent => :destroy, :autosave => true

投稿を保存すると、画像も保存されます。

于 2013-07-10T14:38:22.537 に答える