Я сейчас пытаюсь создать photo
в контроллере. Однако экземпляр не сохраняется. Я передаю правильные параметры, но не уверен, почему не сохраняется.
18: def create
19: @photo = Photo.new(photo_params)
=> 20: binding.pry
21: if @photo.save
22: redirect_to @photo
23: else
24: render "new"
25: end
26: end
[1] pry(#<PhotosController>)> Photo.new(photo_params)
=> #<Photo:0x00007fefafb9b058 id: nil, user_id: nil, location: "New York", description: "something somethings", created_at: nil, updated_at: nil>
Как вы можете видеть выше, параметры передаются, но не id, и user_id также равен nil, это из-за ассоциации, которая не создается?
class PhotosController < ApplicationController
def index
@photos = Photo.all
end
def show
@photo = Photo.find(params[:id])
end
def new
@photo = Photo.new
end
def edit
@photo = Photo.find(params[:id])
end
def create
@photo = Photo.new(photo_params)
if @photo.save
redirect_to @photo
else
render "new"
end
end
def update
@photo = Photo.find(params[:id])
respond_to do |format|
if @photo.update(photo_params)
format
.html { redirect_to @photo, notice: 'Post was successfully updated.' }
else
format.html { render :edit }
end
end
end
private
def photo_params
params.require(:photo).permit(
:location,
:description,
:image,
)
end
end
Вот контроллер для фотографий. Вот и я новое создаю. В create
я передаю параметры для создания фото. Интересно, должен ли я передать это от текущего пользователя из-за следующей ассоциации.
class Photo < ApplicationRecord
has_one_attached :image
belongs_to :user
end
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :photos
has_one :profile
accepts_nested_attributes_for :profile
end
Здесь у меня есть следующие модели. У пользователя много фотографий, и фотография принадлежит ему.
class CreatePhotos < ActiveRecord::Migration[5.2]
def change
create_table :photos do |t|
t.references :user, foreign_key: true
t.string :location
t.string :description
t.timestamps
end
end
end
Что касается миграции фотографий. Я не думаю, что мне нужно добавлять :image
в таблицу, поскольку ActiveStorage позаботится об этом методом has_one_attached
. Не уверены в чем проблема?