提交我的新餐廳的形式時,我得到了以下錯誤: 沒有路由匹配[POST]「/餐廳」沒有POST路線 - 嵌套資源造成混亂
而且沒有[POST]路徑當我運行耙路線。我得到如下:
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
我的routes.rb:
devise_for :users
resources :users, :shallow => true do
resources :restaurants do
resources :reviews, except: [:index, :show] #create review paths
end
end
我user.rb:
has_many :reviews
has_many :restaurants
我restaurant.rb:
has_many :reviews
belongs_to :category
belongs_to :user
我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
我的餐館/ new.html.erb:
<%= form_for @restaurant do |f| %>
有沒有更好的方式來餐廳綁在用戶爲了讓餐館老闆到編輯頁面?如果沒有,我會如何解決這個錯誤?
<%= link_to "Create a Restaurant",
new_user_restaurant_path(current_user.id), class: "btn btn-lg btn-primary"%>
那固定的路由錯誤,現在我得到 「無法找到用戶與 'ID'=」 運行時set_user。我使用指向創建餐廳頁面的鏈接更新了帖子。 –
這個錯誤提高了#create動作的權利?這是因爲你不應該在那裏執行它,因爲你正在執行'current_user.restaurants.build(restaurant_params)',所以沒有意義。你應該把你的回調改成這個'before_action:set_user,除了::create'並且在你的創建操作中刪除'@restaurant.user = @ user' –
感謝你的幫助!這讓它工作。我還必須將set_user中的代碼更改爲@user = current_user。 –