Я создаю приложение для электронной коммерции, где каждый пользователь может создать свой собственный магазин.Связь между пользователем и магазином должна быть
user has_one shop
shop belongs_to user
И до сих пор пользователь, создавший магазин, работает отлично.Но для тех, кто этого не сделал, он показывает мне ошибку:
No route matches {:action=>"show", :controller=>"shops", :id=>nil}, missing required keys: [:id]
По моему shops_controller.rb
class ShopsController < ApplicationController
before_action :find_shop, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
before_action :find_user
def show
if current_user.shop.blank?
render 'new'
else
@items = Item.where(shop_id: @shop.id)
end
end
def index
@shops = Shop.all.order("created at DESC")
end
def new
@shop = current_user.build_shop
end
def create
@shop = current_user.build_shop(shop_params)
if @shop.save
session[:shop_id] = @shop.id
flash[:success] = "Creating item success"
redirect_to @shop, notice: 'success'
else
render 'new'
end
end
private
def shop_params
params.require(:shop).permit( :name , :user_id)
end
def find_store
@shop = Shop.find(params[:id])
end
def find_user
@user = UrStore.find_by(params[:user_id])
end
end
По application.html.erb
<% if user_signed_in?%>
<%= link_to "profile", user_path(current_user.id) %>
<% if current_user.shop == nil %>
<li><%= link_to "Your shop", new_shop_path %></li>
<% else %>
<li><%= link_to "Your shop", shop_path(current_user.shop.id)%></li>
<% end %>
<% end %>
current_user
генерируется автоматически с помощью gem 'devise.
Ошибка произошла, когда я нажал "Ваш магазин", и ошибка произошла только с пользователем, который не создает свой магазин
в rout.rb:
devise_for :users
root 'static_pages#home'
as :user do
get "signin" => "devise/sessions#new"
post "signin" => "devise/sessions#create"
delete "signout" => "devise/sessions#destroy"
end
resources :shops
В этой строке возникла ошибка:
<li><%= link_to "Your Shop",shop_path(current_user.shop.id)%></li>
Я ищу решения для решения этой проблемы: -)