ブログの記事投稿機能を作っています。
現在、BlogテーブルとImageテーブルを一対多で関連付けています。
また、ネストしたフォームでImageテーブルに画像を登録できるようにしています。
ここまでは、おそらくうまくいきました
ですが次のステップ、投稿した画像をviewで表示することができません。
具体的に言います。
もし画像を別テーブルにせずにBlogテーブルに保存していたら以下のコードで画像URLが取得できますよね。
ruby
1@blog.picture.url
そこで私は以下のコードでImageテーブル画像のURLを取得できると思いトライしました。
ruby
1@blog.images.picture.url
しかし、これだとそもそも
@blog.imagesが、ActiveRecord::Associations::CollectionProxyというオブジェクトらしくて、.picture.urlが機能しません。
次に以下を試しました。
ruby
1@blog.images.first.picture.url
今度は、@blog.images.first.pictureがarrayオブジェクトだからurlメソッドが使えないと出ました。
他にもいろいろやってるのですができずに混乱しています。
聞きたいことをまとめると、Blogモデルのオブジェクトから関連付けているImageモデルの画像URLを取得したい。
というものです。よろしくお願いいたします。
migrationファイルだと長くなるので、schema.rbを載せます。
blogsのほうにもpictureカラムがありますが気にしないでください。
ruby
1 create_table "blogs", force: :cascade do |t| 2 t.integer "user_id" 3 t.text "content" 4 t.text "title" 5 t.text "category" 6 t.datetime "created_at", null: false 7 t.datetime "updated_at", null: false 8 t.string "picture" 9 t.integer "impressions_count", default: 0 10 end 11 12 create_table "images", force: :cascade do |t| 13 t.integer "blog_id" 14 t.string "picture" 15 t.datetime "created_at", null: false 16 t.datetime "updated_at", null: false 17 t.text "pictures" 18 end 19コード
Blogモデル
ruby
1class Blog < ApplicationRecord 2 has_many :images, dependent: :destroy 3 accepts_nested_attributes_for :images 4 5 is_impressionable counter_cache: true 6end
Imageモデル
ruby
1class Image < ApplicationRecord 2 belongs_to :blog, optional: true 3 mount_uploaders :picture, PictureUploader 4end 5
回答2件
あなたの回答
tips
プレビュー