1

Когда я хочу, чтобы создать статью, я получаю эту ошибку после нажатия кнопки на кнопку создать статьюUrlGenerationError Отсутствует обязательный ключ [: id] Ошибка?

нет соответствующего маршрута {: действие => «шоу»,: контроллер => «статьи»,: ИД => nil} отсутствующие требуемые ключи: [: id]

, хотя я уверен, что есть пользователь, который вошел в систему перед созданием статьи. Вот мой код:

articles_controller.rb

class ArticlesController < ApplicationController 
    before_action :require_user , except:[:index,:show] 

    def index 
     @articles = Article.all 
    end 

    def new 
    @article = Article.new 
    end 

    def create 
    @article = Article.new(article_params) 
    if @article.save 
     flash[:notice] = "Your Article was Created" 
    else 
     render 'new' 
    end 
    redirect_to article_path(@article) 
    end 

    def show 
    @article = Article.find(params[:id]) 
    end 

    def edit 
    @article = Article.find(params[:id]) 
    end 

    def update 
    @article = Article.find(params[:id]) 
    if @article.update(article_params) 
     flash[:notice] = "Your Article was Updated" 
     redirect_to article_path(@article) 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    @article = Article.find(params[:id]) 
    @article.destroy 
    flash[:notice] = "Your Article was deleted" 
    redirect_to articles_path(@article) 
    end 

    private 

    def article_params 
    params.require(:article).permit(:title,:description) 
    end 

конец

users_controller.rb

class UsersController < ApplicationController 
    def index 
    @users = User.all 
    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     flash[:success] = "You Signed up successfully" 
     redirect_to articles_path 
    else 
     render 'new' 
    end 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update(user_params) 
     flash[:success]= "Your user was updated" 
     redirect_to articles_path 
    else 
     render 'edit' 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:username,:email,:password) 
    end 

конец

просмотров/new.html

<h1>New Article</h1> 
<%= form_for @article do |f| %> 

<p>title<%= f.text_field :title %></p><br> 
<p>description<%= f.text_area :description %></p> 
<%= f.submit "Create" %> 
<%end%> 

здесь my github repo

+0

Пожалуйста, проверьте создать статью кнопку ссылку, он перенаправляет вас, чтобы показать действие контроллера статьи – Navin

+0

в коде '

  • <% = link_to "Новый", new_article_path (@article)%>
  • '. Вам не нужно указывать параметры в 'new_article_path'. В противном случае, он проверяет статью без «id», как сказал navin. –

    +0

    все еще показывает ошибку, хотя я удалил параметры. – AHmed

    ответ

    2

    При создании недопустимой статьи он даст вам missing required keys: [:id], так как он не @article.save он будет redirect_to article_path(@article), в котором в этом случае @ article.id является nil

    def create 
        @article = Article.new(article_params) 
        if @article.save 
         flash[:notice] = "Your Article was Created" 
        else 
         render 'new' 
        end 
        redirect_to article_path(@article) 
    end 
    

    Просто двигаться redirect_to article_path(@article)@article.save, если это правда.

    def create 
        @article = Article.new(article_params) 
        if @article.save 
         flash[:notice] = "Your Article was Created" 
         redirect_to article_path(@article) 
        else 
         render 'new' 
        end  
    end 
    

    Edit:

    Я клонировал ваш репозиторий и существует проблема при создании статьи без user_id. добавил изменения в нижней части и, похоже, работает как ожидалось.

    def create 
         @article = current_user.articles.build(article_params) 
    
         if @article.save 
          flash[:notice] = "Your Article was Created" 
          redirect_to article_path(@article) 
         else 
          render 'new' 
         end  
        end 
    

    Надеюсь, что это поможет!

    +0

    Проблема заключается в том, когда код перемещается в @ article.save, он не сохранит статью, даже если есть имя пользователя и заголовок, а описание проверено. – AHmed

    +0

    см. Мое обновление. – mrvncaragay

    1

    Вы получили эту ошибку из-за визуализации и перенаправлять как получение выполняется при @ article.save fails.So он идет еще части, где получить воздавать новые и снова перенаправляет показать страницу с идентификатором = nil.

    def create 
        @article = Article.new(article_params) 
        if @article.save 
         flash[:notice] = "Your Article was Created" 
         redirect_to article_path(@article.id) # or @article 
        else 
         render 'new' 
        end  
    end 
    
    +0

    Он все еще не работает. Когда я нажимаю кнопку «Создать статью», она не сохранит статью, даже если я изменю метод действия создания на этот код. Я попробовал консоль, и она прекрасно создает статью без каких-либо проблем. – AHmed

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