Так я мое приложение установить с идентификаторами, как так:Получение идентификатора модели, использующей Вложенные маршруты и Permalinks в Rails
resources :studios do
resources :bookings
end
Это дало мне путь к индексу (который позже я собираюсь использовать JSON для получить календари для каждой студии.
studio_bookings GET /studios/:studio_id/bookings(.:format) bookings#index
Это хорошо, но я хотел бы избавиться от ID и использовать постоянную ссылку вместо этого, только для дружелюбного URL.
Переключает :
namespace :studio, :path =>'/:permalink' do
resources :bookings
end
Теперь я получаю
studio_bookings GET /:permalink/bookings(.:format) studio/bookings#index
Отлично! это, как я хочу, чтобы мой URL, чтобы посмотреть, однако, в настоящее время: идентификатор не где-нибудь в пути так ... Я получаю
Couldn't find Booking without an ID
Это даже и не передается. Есть ли способ передать: id с URL-адресом без его фактического использования в URL-адресе? В противном случае я могу изменить первичный ключ от: id до: permalink, чтобы исправить это?
Я попытался изменить мой контроллер от
@studio = Studio.find(params[:id])
в
@studio = Studio.find(params[:permalink])
, но это дает мне
Couldn't find Booking with 'id'=40frost
Который говорит мне, что я делаю на самом деле не означает, сделать? Он пытается установить постоянную ссылку как идентификатор, поэтому, хотя я рассказываю о том, что рельсы ищут постоянную ссылку, она все еще выглядит как идентификатор.
Надеюсь, моя проблема ясна: по существу - как я могу передать идентификатор, чтобы он знал, какая студия не отображает ее в URL-адресе. Если есть какая-то контрольная магия, которую я могу сделать, это будет удобно.
Вот мой контроллер для ровного
class Studio::BookingsController < ApplicationController
before_action :set_booking, only: [:show, :edit, :update, :destroy]
# GET /bookings
# GET /bookings.json
def index
@studio = Studio.find(params[:permalink])
@bookings = Booking.where("studio_id => '@studio.id'")
end
# GET /bookings/1
# GET /bookings/1.json
def show
end
# GET /bookings/new
def new
@booking = Booking.new
end
# GET /bookings/1/edit
def edit
end
# POST /bookings
# POST /bookings.json
def create
@booking = Booking.new(booking_params)
respond_to do |format|
if @booking.save
format.html { redirect_to @booking, notice: 'Booking was successfully created.' }
format.json { render action: 'show', status: :created, location: @booking }
else
format.html { render action: 'new' }
format.json { render json: @booking.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /bookings/1
# PATCH/PUT /bookings/1.json
def update
respond_to do |format|
if @booking.update(booking_params)
format.html { redirect_to @booking, notice: 'Booking was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @booking.errors, status: :unprocessable_entity }
end
end
end
# DELETE /bookings/1
# DELETE /bookings/1.json
def destroy
@booking.destroy
respond_to do |format|
format.html { redirect_to bookings_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_booking
@booking = Booking.find(params[:permalink])
end
# Never trust parameters from the scary internet, only allow the white list through.
def booking_params
params.require(:booking).permit(:start_time, :end_time, :studio_id, :engineer_id, :title, :allDay)
end
end
спасибо. Я пошел со вторым методом. – Peege151
Это, вероятно, разумно, потому что вы захотите использовать свои идентификаторы для извлечения записей для обновления и прочее, удачи там! – jfornoff