私は一日中さまざまなソリューションを試してきました。しかし、何も動作していないようです。レール情報が受信されましたが、データベースに保存されませんでした
背景情報:私のアプリでは、ユーザーは画像をアップロードでき、各画像には多くのユーザーがいる可能性があります。ですから、これは多対多関連です。 私が遭遇している問題は、フォームから受け取った情報/データがデータベースに保存されないということです。
私は繭の宝石を使用しています。画像をアップロードするときに、フロントエンドのユーザーフィールドを追加したり削除したりすることができます。画像をアップロードしてuser1とuser2を選択すると、user_id1とuser_id2が受信されたことがデバッガからわかりました。送信した後、私はrails consoleを使ってimage.usersを確認します。しかしそれは空であり、ユーザーはイメージに関連付けられていません。私は多くの研究を行い、さまざまな方法を試しましたが、何も動作していないようです。
フォームからuser_idsが受信されたことを示すデバッガ。
{"utf8"=>"✓", "authenticity_token"=>"/q52XogfTcEqCLap3K5C4B4I1gNYQGfBJOynNvdIXUE3ViVnRM+2JcksmaAwCWzBXw2kSOqOR+W25pefgBRRGw==", "image"=>{"picture"=>#<ActionDispatch::Http::UploadedFile:0x007f49998bd320 @tempfile=#<Tempfile:/tmp/RackMultipart20170103-11352-qmm06k.png>, @original_filename="erincolor4.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"image[picture]\"; filename=\"erincolor4.png\"\r\nContent-Type: image/png\r\n">, "image_users_attributes"=>{"1483469430746"=>{"user_id"=>"1", "_destroy"=>"false"}, "1483469434072"=>{"user_id"=>"9", "_destroy"=>"false"}}}, "commit"=>"Upload", "controller"=>"images", "action"=>"create"}
私はこの問題は、フォームではありません疑うが、どちらかそれは、モデルやコントローラです。
#Image model
class Image < ActiveRecord::Base
attr_accessor :picture, :image_users_attributes, :user_id
has_many :image_users, dependent: :destroy
has_many :users, through: :image_users
accepts_nested_attributes_for :image_users, reject_if: :all_blank, allow_destroy: true
mount_uploader :picture, ImageUploader
validates :picture, presence: true
validates_associated :image_users
end
#User model
class User < ActiveRecord::Base
has_many :image_users
has_many :images, through: :image_users
end
#ImageUser model
class ImageUser < ActiveRecord::Base
belongs_to :user
belongs_to :image
end
イメージコントローラ
class ImagesController < ApplicationController
before_action :set_image, only: [:show, :destroy, :edit, :update]
before_action :require_user, only: [:new, :create, :edit, :update, :destroy]
def new
@image = Image.new
end
def create
debugger
@image = Image.new(image_params)
if @image.save
flash[:success]="Image saved"
redirect_to user_path(current_user)
else
render'new'
end
end
...........
private
def image_params
params.require(:image).permit(:picture, image_users_attributes:[:id, :user_id, :_destroy])
end
def set_image
@image =Image.find(params[:id])
end
end
フォームビュー:
<%= form_for @image do |f|%>
<div class="field">
<%= f.file_field :picture, accept: 'image/jpeg, image/gif, image/png'%>
</div>
<div id='image_users'>
<%= f.fields_for :image_users do |u| %>
<%=render 'image_user_fields', :f => u %>
<% end %>
<div class="links">
<%= link_to_add_association 'add user', f, :image_users %>
</div>
</div>
<%= f.submit 'Upload' %>
<% end %>
#nested form
<div class="nested-fields">
<div class="field">
<%= f.label :content,"Stylist" %><br>
<%= f.collection_select :user_id, User.all, :id,:username, :prompt => " " %>
</div>
<%= link_to_remove_association "remove stylist", f %>
</div>
私はこの問題を考え出しcloud9 IDE
どのような宝石で画像を保存していますか? –
私はgem 'carrierwave'を使用しています gem 'mini_magick'画像には – Gweno