Я получаю сообщение «Не удалось найти местоположение с ID = 4 для сообщения с ошибкой ID =» в PostsController # create, когда пользователь создает новое сообщение с вложенной формой местоположения ,Rails 4.2 поднял ActiveRecord :: RecordNotFound при создании нового сообщения
В этом случае сообщение имеет одно местоположение, и у пользователя есть много мест через сообщения.
Пользователи могут создать первое новое сообщение успешно, но ошибка возникает, когда пользователи снова создают новое сообщение.
PostsController:
class Categories::PostsController < ApplicationController
...
def new
@post = Post.new
if current_user.locations
@post.location = current_user.locations.first
else
@post.build_location
end
end
def create
@post = current_user.posts.build(post_params)
@post.category = @category
if @post.save
flash[:success] = "You have succesfully created a new post."
redirect_to [@category, @post]
else
flash[:danger] = "Error occured. Please try again."
render :new
end
end
...
private
def post_params
params.require(:post).permit(:title, :body, location_attributes: [:id, :street, :city, :zipcode, :_destroy])
end
end
Здесь @post = current_user.posts.build(post_params)
в создании действия бросает ошибку.
Я заметил, что когда я удалил location_attributes: [:id]
, пользователи могут создавать новые сообщения. Но без белого идентификатора местоположения в журнале сервера есть ошибка «Неверный параметр id», а также пользователи не могут удалить вложенную форму местоположения при редактировании сообщений.
Я понимаю, что метод создания будет работать путем удаления:
if current_user.locations
@post.location = current_user.locations.first
Однако моя цель состоит в том, чтобы получить предыдущие данные о местоположении от пользователей, так что они не должны проставить тот же адрес снова в новом сообщения.
Кроме того, я хотел бы, чтобы почта была создана без заполнения формы местоположения.
Благодарим за помощь!
Update: Я попытался изменить ассоциацию для пользователя, Location и Поста моделей, но это не исправить ту же ошибку я получил.
post.rb
belongs_to :location
belongs_to :user
accepts_nested_attributes_for :location
location.rb
has_many :posts
belongs_to :user
user.rb
has_many :posts
has_many :locations
Какие другие методы могут помочь исправить ошибку?
JeffD23, большое спасибо за вашу помощь! Не могли бы вы также объяснить, почему «Почта» в этом случае должна принадлежать местоположению? Если почта принадлежит местоположению, предотвратит ли это сообщение от уничтожения мест, когда мы обновим атрибуты post? –
Сообщение должно принадлежать к местоположению, потому что вам нужен внешний ключ в модели Post для «User has_many: местоположения, через:: posts» для правильной работы. belongs_to и has_one почти идентичны, различие заключается в том, где находится foreign_key. Обновление атрибутов сообщения не должно уничтожать местоположения, если вы специально не указали это в контроллере. – JeffD23
Извините, после изменения связи между почтой и местоположением такая же ошибка сохраняется. –