Место Модель:Рубин на Rails first_or_create вложенная модель
class Place < ApplicationRecord
has_many :post_places, dependent: :destroy
has_many :posts, through: :post_places
end
Сообщение Модель:
class Post < ApplicationRecord
has_many :post_places, dependent: :destroy
has_many :places, through: :post_places, dependent: :destroy
accepts_nested_attributes_for :places,
:allow_destroy => true,
:reject_if => :all_blank
end
сообщение Создать:
def create
@post = current_user.posts.build(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
Сообщение Params:
def post_params
params.require(:post).permit(:title, :description, :user_id, places_attributes: [:id, :title, :latitude, :longitude, :_destroy])
end
При регистрации нового сообщения я хочу, чтобы он не перерегистрировался и не использовал этот идентификатор, если он зарегистрирован в базе данных. Я нашел этот код для этого, но он не принимает его, потому что он является вложенным атрибутом.
Код Im используя вместо создания:
@place = Place.where(latitude: place_params[:latitude], longitude: place_params[:longitude]).first_or_create do |place|
place.attributes = place_params
end
Спасибо за помощь!
Что вы хотите: «Если существующее сообщение отправлено, я хочу связать его с новое место, вместо того, чтобы создавать оба? " – Gaston
Если существующее место отправлено, я хочу связать с сообщением, но если не существует, создайте новое место – ccoeder