前提
ドロップダウンリスト(collection_select使用してIdolテーブルのnameカラムから選択させる)
から選択した値をImageテーブルのnameカラムに格納させたいです。
実現したいこと
テーブル①のデータを投稿フォームのドロップリストから選択させて、テーブル②に登録させたいです。
投稿フォームのドロップダウンリスト(collection_select)から選択させて、実際投稿(テーブル②)すると変な文字列が保存されてしまいます。⇒ #Idol::ActiveRecord_Relation:0x00007faf62a68538
この文字列はどこからやってきたのか、原因がわからないので解決方法を教えていただきたいです。
該当のソースコード
views/iimages/index.html.erb <%= form_with model: @image, local: true do |form| %> ~省~ <!--ドロップダウンリスト テーブル:Idol, カラム:idol_name--> <%= form.collection_select :idol_name, Idol.all, :idol_name, :idol_name, :include_blank => true %> <% end %> <!--投稿されたものを表示--> <% @images.each do |image| %> ~省~ <%= image.idolname %> <% end %>
views/controllers/images_controller.rb def index #全ての投稿内容を表示 @images = Image.all.order(id: "DESC") #新しい投稿 @image = Image.new end def create @image = Image.new(image_params) #Idolにストロングパラメータの値が存在するか @image.idolname = Idol.where(idolname: params[:idol_name]) if @image.save redirect_to root_url, notice: 'Add Image' else #再度indexページを表示 @images = Image.all render :index end end
試したこと
補足情報(FW/ツールのバージョンなど)
情報が足りない場合は追加します。よろしくお願い致します。
app/models/idle.rb, image.rb を質問に追加してください
モデルのファイルを載せるのをわすれていたので追記します。すみません。
多対多で関連付けしています。
app/models/idl.rb
class Idol < ApplicationRecord
has_many :image_idol
has_many :images, through: :image_idol
end
app/models/image.rb
class Image < ApplicationRecord
has_one_attached :avatar
validate :avatar_presence
has_many :image_idol
has_many :idols, through: :image_idol
validates :name,
length: { minimum: 0, maximum: 15 }
validates :comment,
length: { minimum: 0, maximum: 100 }
validates :avatar, presence: true
end
app/models/image_idol.rb
class ImageIdol < ApplicationRecord
belongs_to :image
belongs_to :idol
end
回答1件
あなたの回答
tips
プレビュー