我正在try 构建一个非常简单的AddressBook rails应用程序.然而,我遇到了这样一个错误:"不能批量分配受保护的属性:city_id".我该怎么解决这个问题?关于下面的rails代码,请随时添加任何 comments /建议.谢谢

我如何创建项目(从头开始):

rails new demo
rails generate model City name:string
rails generate scaffold User name:string city:references
rake db:migrate

db/种子.db:

City.create(name: "City1")
City.create(name: "City2")
City.create(name: "City3")

rake db:种子

将第<%= f.text_field :city %>行从app/views/users/_form.html.erb改为<%= f.collection_select :city_id, City.all, :id, :name %>

user.rb自动生成的第belongs_to :city行更改为has_one :city行.

belongs_to :city增加到city.rb

附言:我正在使用Rails 3.2.3和Ruby 1.9.3.

推荐答案

rails 3.2.3有一个重要的安全更改,它要求您通过将config.active_record.whitelist_attributes设置为false来明确允许大规模分配

https://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/

http://www.h-online.com/security/news/item/Rails-3-2-3-makes-mass-assignment-change-1498547.html

或者(更好),不允许批量分配,只需为模型中希望更改的属性设置attr_accessible,例如.

attr_accessible :city_id, :name # list all fields that you want to be accessible here

有关rails中质量分配的更多信息,请查看rails security guide.

Ruby-on-rails相关问答推荐

如何使用继承类 (STI) 获取 Ruby on Rails 类中基类的实例

正确更新其他列的更新列

如何使用 RSpec 和 Devise/CanCan 进行集成测试?

注册表单上是否需要 CSRF 保护?

Gem 更新:在从 ASCII-8BIT 到 UTF-8 到 US-ASCII 的转换中,无法将 "\xE7" 转换为 UTF-8

用 url_for 查询参数?

Rails 3:如何正确显示textarea中的文本?

如何避免 has_many :through 关系中的重复?

Ruby on Rails:有条件地显示部分

.increment vs += 1

警告:引用了顶级常量

在 ruby​​ 中构建公钥时,是什么导致既不是 PUB key 也不是 PRIV key::nested asn1 错误?

设计自定义路由和登录页面

Rails 5:重命名表迁移

在rails国际化yml文件中传递变量

何时(如果)合并 ActiveRecord 迁移?

Rails:每个环境的初始化程序?

Sidekiq Rails 4.2 使用 Active Job 还是 Worker?有什么不同

Rails:在 link_to 中保留 GET 查询字符串参数

保存用户偏好的最佳方法?