首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >10.1.3 "User/Micropost关联“错误

10.1.3 "User/Micropost关联“错误
EN

Stack Overflow用户
提问于 2012-12-24 03:53:56
回答 3查看 501关注 0票数 1

我是Ruby on Rails的新手,并且一直在学习Michael Hartl的Rails教程。我在第10章遇到了一个似乎无法修复的bug (特别是10.1.3“用户/微博关联”)。我遇到的错误是当我执行以下rspec命令时:

$捆绑包exec rspec规格/型号

它会引发以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Failures:

  1) Micropost accessible attributes should not allow access to user_id
     ←[31mFailure/Error:[0m ←[31mexpect do[0m
       ←[31mexpected ActiveModel::MassAssignmentSecurity::Error but nothing was
raised←[0m
←[36m     # ./spec/models/micropost_spec.rb:28:in `block (3 levels) in <top (req
uired)>'←[0m

Finished in 5.79 seconds
←[31m27 examples, 1 failure←[0m

Failed examples:[31mrspec ./spec/models/micropost_spec.rb:27[0m ←[36m# Micropost accessible at
tributes should not allow access to user_id←[0m

这是micropost_spec.rb的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require 'spec_helper'

describe Micropost do

let(:user) { FactoryGirl.create(:user) }
before { @micropost = user.microposts.build(content: "Lorem ipsum") }

subject { @micropost }

  it { should respond_to(:content) }
  it { should respond_to(:user_id) }
  it { should respond_to(:user) }
  its(:user) { should == user }

  it { should be_valid }




  describe "when user_id is not present" do
    before { @micropost.user_id = nil }
    it { should_not be_valid }
  end


  describe "accessible attributes" do
    it "should not allow access to user_id" do
      expect do
       Micropost.new(user_id: user.id)
      end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
    end
  end
end

application.rb:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require File.expand_path('../boot', __FILE__)

# Pick the frameworks you want:
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"

  if defined?(Bundler)
 # If you precompile assets before deploying to production, use this line
 Bundler.require(*Rails.groups(:assets => %w(development test)))
 # If you want your assets lazily compiled in production, use this line
 # Bundler.require(:default, :assets, Rails.env)
end

module SampleApp
  class Application < Rails::Application
   # Settings in config/environments/* take precedence over those specified here.
   # Application configuration should go into files in config/initializers
   # -- all .rb files in that directory are automatically loaded.
config.active_record.whitelist_attributes = true
   # Custom directories with classes and modules you want to be autoloadable.
   # config.autoload_paths += %W(#{config.root}/extras)

    # Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]

# Activate observers that should always be running.
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"

# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]

# Enable the asset pipeline
config.assets.enabled = true

# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
 end
 end

micropost.rb...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Micropost < ActiveRecord::Base
  attr_accessible :content
  belongs_to :user

  validates :user_id, presence: true
end

提前感谢您的帮助!

泰语

EN

回答 3

Stack Overflow用户

发布于 2012-12-24 05:34:35

因此在调用Micropost.new(user_id: user.id)时使用expected ActiveModel::MassAssignmentSecurity::Error but nothing was raised

为了让它正常工作:

  1. Rails应用程序应配置为显式地将可访问的参数列入白名单或黑名单;在3.2.3之前的rails版本中,默认情况下这是启用的;在以前的版本中,必须通过以下行在config/application.rb中完成此操作,如Listing 10.6 of RailsTutorial bookconfig.active_record.whitelist_attributes = true
  2. There中所述,它不应是micropost.rb模型文件中的attr_accessible :user_id
票数 0
EN

Stack Overflow用户

发布于 2013-11-22 21:04:52

尝试添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config.active_record.mass_assignment_sanitizer = :strict 

对于您的application.rb文件,我发现如果不严格,它只会抛出一个警告,而不是异常。

票数 0
EN

Stack Overflow用户

发布于 2014-08-01 18:42:40

像你一样,我尝试了上面所有的解决方案,但都没有成功。我还注意到Hartl针对Rails4的新书版本没有包含这些测试,因此我怀疑这种测试可访问性的方法在以后的版本中不起作用。也许一位专家(不熟悉Rails教程的人)可以加入进来。

但是...我在另一个推荐“应该匹配”Gem来测试它的StackOverflow线程中注意到了这个响应,这为我解决了这个问题(https://stackoverflow.com/a/11876425/3899955)。在研究这个Gem时,我发现它是为许多常见的ActiveModel、ActiveRecord和ActionController测试生成可读测试的一种很好的方法。我很高兴能在我的箭筒中加入这一点,也许你也会这样做。

我并不认为这个答案是值得称赞的,只是想把这篇文章贴出来,这样如果有人在做第10.5章或者完成第9章的练习6的时候遇到了这种挫折。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14016874

复制
相关文章
sql连接查询和嵌套查询_sql子查询和连接查询
【例二】:查询 JAVA第一学年 课程成绩排名前十的学生 并且分数要大于80 的学生信息(学号、姓名、课程名称、分数)
全栈程序员站长
2022/09/22
4.4K0
sql连接查询和嵌套查询_sql子查询和连接查询
Linux/Unix shell 参数传递到SQL脚本
      在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DBA经常碰到的情形之一。本文主要讨论了如何将shell脚本的参数传递到SQL脚本之中并执行SQL查询。   有关shell与SQL之间的变量传递,请参考:  Linux/Unix shell sql 之间传递变量
Leshami
2018/08/14
2K0
从SocketTimeoutException到全连接队列和半连接队列
大概在一年半之前的时候,我们的应用的某个业务开始间歇报SocketTimeoutException, 不是前端调用我们发生SocketTimeoutException,而是我们用 HTTP Client中台拉取数据的时候,会偶尔报SocketTimeException, 这个偶尔可能是一个月报一次,也可能是两个月报一次,可能一个星期报两次,频率不固定,次数也不固定,当我第一次看到这个异常的时候,我的第一个反应就是用这个异常信息去搜索引擎上搜索解决方案,我并不理解这个异常说明了什么,但是按照我以往的经验来说,一般都有解决方案,对搜索引擎的方案一般都是延长超时时间,于是我延长了超时时间,但这并没有根本上解决问题,还是会出问题。延长超时时间不管用之后,我就扩容,但是扩容依然也不管用,我当时在尝试复现这个异常的时候,也忽略了一些东西,然后导致我在测试无法复现,能够复现的问题都是好问题,我之前面试的时候也背过三次握手,也学过Java 的原生Socket 编程,Netty,我背过Tomcat的acceptCount参数,但是碰到这个问题,这些知识仍然没有帮我解决问题,原因当时我网络的知识没有连接起来,他们孤零零的,向孤零零的神经元一样,没建立起来连接,最后这个问题开始让这些知识开始建立连接,成体系的发展。连接才是有价值的。
fliter
2023/10/09
5140
从SocketTimeoutException到全连接队列和半连接队列
从Python传递参数到C++
有些场景下,需要将Python里面计算得到的参数或者结果传入到C++来进行工程部署。一个常见问题是,Python该以什么格式 (二进制还是文本) 保存这些参数,然后从C++代码里面来读取呢,各有什么优劣?这里我们简单实验一下,并写一些趁手的代码,供查阅。
王云峰
2023/10/21
3400
如何将多个参数传递给 React 中的 onChange?
在 React 中,一些 HTML 元素,比如 input 和 textarea,具有 onChange 事件。onChange 事件是一个非常有用、非常常见的事件,用于捕获输入框中的文本变化。有时候,我们需要将多个参数同时传递给 onChange 事件处理函数,在本文中,我们将介绍如何实现这一目标。
网络技术联盟站
2023/06/07
2.7K0
Mysql状态信息查询--连接相关
查看连接线程相关的系统变量的设置值 show variables like 'thread%';
陈不成i
2021/06/15
1.4K0
Golang函数参数的值传递和引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
仙人技术
2021/08/31
2.5K0
Golang函数参数的值传递和引用传递
java之方法的参数传递(值传递和引用传递)
基础数据类型参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响;
西西嘛呦
2020/08/26
2.1K0
《Java从入门到失业》第四章:类和对象(4.4):方法参数及传递
       关于这个知识点,我想了很久该不该在这里阐述。因为这个知识点稍微有点晦涩,并且就算不了解也不影响用Java编写代码。不过笔者刚开始工作的时候,就是因为这块内容没有过多的关注,以至于相当于长一段时间对这块内容都模糊不清甚至误解。我相信你们都比我悟性高,因此决定还是先拿出来讨论。
用户7801119
2020/09/27
1.1K0
SQL service基础(四)连接查询、自身连接查询、外连接查询和复合条件连接查询[通俗易懂]
INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T1′, N’李力 ‘, N’男’, 47, N’教授 ‘, 1800, 3000, N’计算机 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T2′, N’王平 ‘, N’女’, 28, N’讲师 ‘, 850, 1200, N’信息 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T3′, N’刘伟 ‘, N’男’, 30, N’讲师 ‘, 900, 1200, N’计算机 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T4′, N’张雪 ‘, N’女’, 51, N’教授 ‘, 1900, 3000, N’自动化 ‘) GO INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N’T5′, N’张兰 ‘, N’女’, 39, N’副教授 ‘, 1300, 2000, N’信息 ‘) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C1′, N’程序设计 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C2′, N’微机原理 ‘, 80) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C3′, N’数字逻辑 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C4′, N’数据结构 ‘, 80) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C5′, N’数据库 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C6′, N’编译原理 ‘, 60) GO INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N’C7′, N’操作系统 ‘, 60) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T1′, N’C1′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T1′, N’C4′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T2′, N’C5′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T3′, N’C1′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T3′, N’C5′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T4′, N’C2′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T4′, N’C3′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T5′, N’C5′, NULL) GO INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N’T5′, N’C7′, NULL) GO INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) V
全栈程序员站长
2022/08/23
2.3K0
SQL service基础(四)连接查询、自身连接查询、外连接查询和复合条件连接查询[通俗易懂]
从VBA的vbNullString认识API参数传递
最近在写个简单的程序时,用到了API FindWindow,复制声明后,直接就把代码写了,可是发现一直找不到窗口,代码:
xyj
2021/03/18
1.8K0
js从 URL 获取查询参数
从 URL 获取查询参数 <script> function getParameterByName(name, url) { if (!url) url
江一铭
2022/06/16
10.5K0
从ajax获取参数到控制器Laravel
route Route::get('search', 'ShowstaffController@search'); 接收变量
双面人
2020/02/17
1.2K0
从 AI 到 信息安全
如果把AI算法用来做个性化推荐,那么算法和被推荐对象会是一种 “相互取悦” 的关系,被推荐者一定希望推荐给他的是他需要的(在隐私保护做的好的前提下),算法也努力试图去计算出被推荐者真正需要的东西,二者是同向而行,或者至少,被推荐对象不会躲着AI走(推荐给我不需要的东西,什么心态?)。 但是算法用来做安全对抗就完全不一样了,算法努力计算出攻击者画像、预测出攻击者的行为,而攻击者则努力规避算法的计算,试图通过各种方式绕开AI的猜测,于是变成了一场对抗。 这是AI算法应用在信息安全的客观情况,包括网络入侵、帐号
数说君
2022/08/25
6040
从 AI 到 信息安全
FastAPI从入门到实战(5)——查询参数与字符串校验
在大多数情况下,需要某些东西时,可以简单地省略 default 参数,因此你通常不必使用 ... 或 Required
MinChess
2022/12/27
6360
FastAPI从入门到实战(5)——查询参数与字符串校验
如何从SharePoint Content DB中查询List数据
SharePoint用来维护基础数据非常方便,只需要建立自定义列表,然后使用InfoPath自定义一下维护界面,就可以实现在线的增删改查,开发效率很高。如果维护的数据需要进行审批,还可以加入工作流功能。使用SharePoint Designer可以快速开发出简单的工作流,如果是很复杂的工作流,那么就需要使用VS进行开发了。现在数据已经维护进了SharePoint List,那么怎么从数据库中将维护的数据查询出来呢?
深蓝studyzy
2022/06/16
3.1K0
从信息熵到Codec
过去几个月,我常常思考一个问题——多媒体(通信)技术到底解决什么问题?交付什么样的服务呢?目前得到的答案是:
LiveVideoStack
2021/09/01
2510
sql sever分组查询和连接查询
分组查询 select 查询信息 from 表名 where 条件 group by 按照列分组(可多个 ,隔开) order by 排序方式 (查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就使用分组进行查询) having 条件    分组筛选(一般和group by连用,位置在其后) where:用来筛选from子句指定的操作所产生的行 group by:用来分组where子句输出 having:用来从分组的结果中筛选行 1.分组查询是针对表中不同的组分类统计和输出的 2.having
房上的猫
2018/03/14
2.2K0
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
【#】会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。
红目香薰
2022/11/30
4050
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
点击加载更多

相似问题

如何将参数从控制器传递到视图,视图传递到控制器?

10

iOS -如何将信息从视图传递到控制器?

22

如何将参数从控制器传递到模板?

23

如何将参数从视图传递到控制器?

111

如何将参数从控制器传递到服务

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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