首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >UrlGenerationError缺少必需的键[:id]错误?

UrlGenerationError缺少必需的键[:id]错误?
EN

Stack Overflow用户
提问于 2016-08-26 01:56:54
回答 2查看 1.2K关注 0票数 1

当我想要创建一篇文章时,单击“创建文章”按钮后会得到此错误。

没有路由匹配{:action=>“显示”,:controller=>“项目”,:id=>nil}缺少必需的键::id

尽管我确保在创建文章之前有一个登录的用户。这是我的密码:

articles_controller.rb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

结束

views/new.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <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%>

这是我的github回购

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-26 02:34:32

当您创建一个无效的文章时,它将给您missing required keys: [:id],因为它失败了@article.save,它将redirect_to article_path(@article),在本例中,@article.id是nil

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

编辑:

我克隆了您的回购程序,在不使用user_id的情况下创建这篇文章时存在问题。添加了底部的变化,它似乎正在发挥作用,如预期。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

希望这能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2016-08-26 02:45:43

您得到了这个错误,因为呈现重定向都在@article.save fails.So中被执行--在其他部分,它将呈现为新的,并再次重定向以id = nil显示页面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39163536

复制
相关文章
Git 提交缺少Change-Id
Git 提交时时候提示如下:主要提示你的提交缺少了Change-Id,主要之前进行了几次git rebase -i 错删了Change-Id导致的
程序手艺人
2019/02/21
3.9K0
多说单点登录(SSO)介绍(解决缺少client_id参数)
多说是目前用的最广泛的一个社会化插件,同时也支持各主流网站的单点登录。官方有详细的开发文档: http://dev.duoshuo.com/docs/5023323ce9b7bde608000012
飞奔去旅行
2019/06/13
1.5K0
多说单点登录(SSO)介绍(解决缺少client_id参数)
Win7系统中必需记住的14个常用快捷键
在使用电脑时,多多少少地都会用到一些快捷键,尤其是在玩游戏,或使用一些软件时。快捷键不仅方便,如果用的好,甚至可以大大提升我们的工作效率。而且,快捷键不仅可以在软件中使用,在Win7系统中其实也有很多实用的快捷键组合。
跟着阿笨一起玩NET
2018/09/18
1.6K0
Win7系统中必需记住的14个常用快捷键
安装SSL检查提示“错误: 服务器缺少中间证书”
首先检测下证书是不是中间证书缺失,以下两个网站都可以检测。 https://www.ssllabs.com/ssltest/index.html https://www.myssl.cn/tools/
咻一咻
2020/05/29
4.3K0
git commit 删除中间提交的错误commit id
经常会遇到提交多个commit ,最后发现版本有问题,需要删除中间的一个commit, git 中并没有提供现成的命令,需要多个命令组合完成该功能.
程序手艺人
2019/02/21
2.7K0
vs2015安装失败,必需的组件失败_博图显示下位组件错误
大家好,又见面了,我是你们的朋友全栈君。 VS2008安装失败,组件安装失败的解决办法 之前安装过VS2008,二次安装时,提示组件安装失败 ![在这里插入图片描述](https://img-blo
全栈程序员站长
2022/10/29
1.1K0
vs2015安装失败,必需的组件失败_博图显示下位组件错误
Winforms Cefsharp应用通过Vs Installer安装,应用崩溃,缺少文件错误
          本文主要分析winforms cefsharp应用通过Vs Installer做成安装包后,安装程序后,启动程序导致应用崩溃,提示System.IO.FileNotFoundException
郑小超.
2022/12/21
9050
Android打包错误Expected resource of type id...
今天刚升级完Android Studio到3.0.1版本,装完之后,遇到一堆问题,改了一大堆问题,终于改完了,就想打包apk试试,没想到打包时报了如下错误:
程序员飞飞
2020/02/27
1K0
Android打包错误Expected resource of type id...
解决 Nginx Let's Encrypt HTTPS 证书 错误: 服务器缺少中间证书
期初是由于在ios系统出现https连接ssl握手时间过长 经过调查有网友说是ssl中间证书缺失 时间长 和 中间证书缺失 这两点是否存在关联目前还有待考证
OwenZhang
2021/12/07
2.7K0
解决 Nginx Let's Encrypt HTTPS 证书 错误: 服务器缺少中间证书
如何系统维护好网站?这款错误监控平台不可缺少
企鹅号小编
2018/01/04
1.1K0
如何系统维护好网站?这款错误监控平台不可缺少
Python缺少zlib的问题
参考: 解决python3缺少zlib的问题 Python安装zlib模块
py3study
2020/01/09
4.6K0
事件ID10016错误解决方案
此方法适用于事件查看器中出现以下错误类型,数字相同或不同没有影响,解决方法大同小异:
reizhi
2022/09/26
3.9K0
事件ID10016错误解决方案
不该缺少的Error体系
该文介绍了如何构建一个完整的错误体系,包括错误码、错误提示、错误处理等方案,并给出了具体的例子和代码。
MelonTeam
2018/01/04
1.6K0
87-OOP之必需掌握的magic
class Book: def __init__(self, title, author, pages): self.title = title self.author = author self.pages = pages def __str__(self): return '《%s》' % self.title def __call__(self): print('《%s》is written b
凯茜的老爸
2018/09/11
3710
MariaDB 在创建外键的时候提示 1005 错误
在 MariaDB 中的表创建外键的时候提示错误: SQL Error (1005): Can't create table `edx`.`TestBankAnswer` (errno: 150 "Foreign key constraint is incorrectly formed") 导致这样原因是因为你的表中没有创建 PK (主键)。 你需要在你的表上面创建主键后再创建外键就可以了。 https://www.ossez.com/t/mariadb-1005/225
HoneyMoose
2020/07/08
1.2K0
MariaDB 在创建外键的时候提示 1005 错误
MySQL GTID复制Slave跳过错误事务ID
背景:安装完master之后,修改root密码的时候忘了关闭binlog,导致update MySQL.user表的时候记录了binlog
星哥玩云
2022/08/16
1.4K0
MySQL GTID复制Slave跳过错误事务ID
Apache Doris BE错误 ErrMsg: invalid cluster id. ignore.
错误提示cluster id无效,那么就把be存储目录storage下的相关文件cluster_id删除
程裕强
2021/08/18
2K0
Babel还是Node开发的“必需品”吗?
现在做 Node 开发还需要“麻烦”的 Babel 吗?毋庸置疑,Babel 曾经对构建和开发 Node.js 应用程序有过很大的影响,但随着 Node.js 的原生功能不断强大,Babel 或许也不再是 Node 开发的“必需品”。本文将主要介绍关于如何在 Node 开发中摆脱 Babel 的方法。
coder_koala
2019/09/25
9260
Babel还是Node开发的“必需品”吗?
点击加载更多

相似问题

ActionController::UrlGenerationError缺少必需的键:[:id]

21

ActionController::UrlGenerationError:缺少必需的键:[:id]

16

Rails 5 ActionController::UrlGenerationError -缺少必需的键:[:id]

27

UrlGenerationError缺少必需的密钥[:id]

37

ActionController::UrlGenerationError-缺少必需的键:[:id],可能的不匹配约束

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文