2016-03-28 2 views
1

У меня есть эта ошибка с моей ссылкой в ​​моих взглядахРельсы Нет маршрута матчей отсутствуют необходимые ключи: [: ID]

HTML

<% if logged_in? %> 
<%=link_to "View Your Cart", cart_path(@cart)%> 
<% end %> 

мои маршруты

resources :users 
    resources :parts 
    resources :carts 
    resources :categories 
    resources :line_items 

У меня есть это метод для назначения тележки пользователю

def set_cart 
    @cart = Cart.find_by(id: session[:cart_id], user: session[:user_id]) 
    rescue ActiveRecord::RecordNotFound 
    @cart = Cart.create 
    session[:cart_id] = @cart.id 
    end 

Вот мои сеансы контроллер

def new 
    @user = User.new 
    end 

    def create 
    if params[:provider] == "facebook" 
     user = User.from_omniauth(env["omniauth.auth"]) 
     session[:user_id] = user.id 
     redirect_to root_path 
    else 
     @user = User.find_by(email: params[:user][:email]) 
     @user = User.new if @user.blank? 
    if @user && @user.authenticate(params[:user][:password]) 
     session[:user_id] = @user.id 
     @cart = Cart.create 
     @user.cart = @cart.id 
     @user.save 
      redirect_to @user 
     else 
     flash[:notice] = "Failed to login, please try again" 
     render 'new' 
     end 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_url 
    end 
end 

А вот моя корзина контроллер

class CartsController < ApplicationController 
    before_action :set_cart, only: [:show, :edit, :update, :destroy] 
    rescue_from ActiveRecord::RecordNotFound, with: :invalid_cart 

    def show 
    @cart = Cart.find(params[:id]) 
    end 

    def edit 
    @cart = Cart.new(cart_params) 
    end 

    def update 
    @cart = Cart.find(params[:id]) 
     if @cart.update_attributes(cart_params) 
     redirect_to @cart 
     end 
    end 

    def destroy 
    @cart.destroy if @cart.id == session[:cart_id] 
    session[:cart_id] = nil 
    respond_to do |format| 
     format.html { redirect_to root_path } 
     format.json { head :no_content } 
    end 
end 

    private 
    def cart_params 
    params.require(:cart).permit(:user_id) 
    end 

    def invalid_cart 
    logger.error "Attempt to access invalid cart #{params[:id]}" 
    redirect_to root_path, notice: "Invalid cart" 
    end 
end 

Следующая ошибка "Нет маршрут соответствует {: действие =>" показать»,: контроллер => "телеги", : id => nil} отсутствуют необходимые ключи: [: id] "поднимается, когда пользователь подписывается в свою учетную запись. Я хочу, чтобы пользователь имел ссылку «View Your Cart» при входе в систему (внутри макетов), чтобы они могли просматривать свою тележку в любом месте. Однако эта ошибка возникает после входа в систему. Любая помощь с этим оценивается, и я рад предоставить дополнительную информацию.

+0

Попробуйте 'redirect_to user_path (@user)' –

+0

для link_to "Посмотреть корзину" ??? – Dan

ответ

1

Try переключения

Cart.find_by(id: session[:cart_id], user: session[:user_id])

с

Cart.find_by!(id: session[:cart_id], user: session[:user_id])

find_by возвращает nil, если запись не была найдена. find_by! throws ActiveRecord::RecordNotFound ошибка.

Для получения дополнительной информации см. ActiveRecord::FinderMethods.

Смежные вопросы