je reçois l'erreur suivante lors de la présentation de mon nouveau formulaire restaurant: Aucun résultat de route [POST] «/restaurants »Aucun itinéraire POST - ressources imbriquées provoquant la confusion
Et il n'y a pas de chemin [POST] quand je lance rake routes. Je reçois le texte suivant:
user_restaurants GET /users/:user_id/restaurants(.:format) restaurants#index
POST /users/:user_id/restaurants(.:format) restaurants#create
new_user_restaurant GET /users/:user_id/restaurants/new(.:format) restaurants#new
edit_restaurant GET /restaurants/:id/edit(.:format) restaurants#edit
restaurant GET /restaurants/:id(.:format) restaurants#show
PATCH /restaurants/:id(.:format) restaurants#update
PUT /restaurants/:id(.:format) restaurants#update
DELETE /restaurants/:id(.:format) restaurants#destroy
Mon routes.rb:
devise_for :users
resources :users, :shallow => true do
resources :restaurants do
resources :reviews, except: [:index, :show] #create review paths
end
end
Mon user.rb:
has_many :reviews
has_many :restaurants
Mon restaurant.rb:
has_many :reviews
belongs_to :category
belongs_to :user
Mon restaurants_controller .rb:
before_action :set_user
before_action :authenticate_user!, only: [:create, :new, :edit, :update,
:destroy]
before_action :check_if_owner?, only: [:edit, :update, :destroy]
def new
@restaurant = Restaurant.new(user: @user) #create a new restaurant
end
def create
@restaurant = current_user.restaurants.build(restaurant_params)
@restaurant.user = @user
@restaurant.save
redirect_to @restaurant
end
private
def set_user
@user = User.find(params[:user_id])
end
def restaurant_params
params.require(:restaurant).permit(:name, :description, :category_id,
:address1, :address2, :city, :state, :zipcode, :phone, :email, :image,
:user_id)
end
Mes restaurants/new.html.erb:
<%= form_for @restaurant do |f| %>
Y at-il une meilleure façon de lier un restaurant à un utilisateur afin de permettre à un propriétaire de restaurant à modifier leur page? Si non, comment pourrais-je réparer l'erreur?
<%= link_to "Create a Restaurant",
new_user_restaurant_path(current_user.id), class: "btn btn-lg btn-primary"%>
Ce fixe l'erreur de routage, maintenant je reçois "Impossible de trouver l'utilisateur 'id' =" lors de l'exécution SET_USER. J'ai mis à jour le post avec le lien vers la page de création de restaurant. –
Cette erreur se lève sur #create action right? C'est parce que vous ne devriez pas l'exécuter ici, n'a pas de sens puisque vous faites 'current_user.restaurants.build (restaurant_params)'. Vous devriez changer votre callback pour ce 'before_action: set_user, sauf:: create' et dans votre action create supprimer '@restaurant.user = @ user' –
Merci pour l'aide! Cela a fonctionné. J'ai aussi dû changer le code dans set_user en @user = current_user. –