ice*_*ice 1 attributes ruby-on-rails rails-activerecord
我刚开始使用rails进行编码.我正在使用:Rails 3.2.8 ruby 1.9.3p194
我创建了一个迁移和相应的模型,所有这些都在它们应该存在的文件中(为了简洁起见,我将它们全部展示在一起):
class CreateMovies < ActiveRecord::Migration
def up
create_table 'movies' do |t|
t.string 'title'
t.timestamps
end
end
def down
drop_table 'movies'
end
end
class Movie < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
所以,我想进入'rails console'并将数据库作为学习过程.
这是我输入的内容和我收到的错误消息:
1.9.3p194 :021 > k = Movie.new(:title => 'coco')
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: title
Run Code Online (Sandbox Code Playgroud)
我必须说如果我追加上述语句就可以正常工作:without_protection => true.
我抬头看了一下质量任务,我明白这是我们应该非常小心的事情.但是,似乎rails默认激活了质量分配保护.在我的情况下,我想使用哈希创建条目,这对调试和学习非常有用!
有没有办法去除这种保护?我想默认拥有公共属性!我怎样才能做到这一点?
奇怪的是,在我的网络研究中,我得出结论,默认情况下此功能不存在,即默认情况下ActiveModel不会创建受保护的属性.(http://stackoverflow.com/questions/3764899/is-there-a-way-to-make-rails-activerecord-attributes-private)但在我的情况下,所有属性都是私有的!
在我的代码中,将来,我应该尝试单独分配所有属性吗?这将是乏味的.是否有更好的方法来保护安全并避免这个繁琐的过程?
提前感谢您的心灵深处!
Rya*_*igg 14
没有!请不要取消激活此保护.这非常有助于阻止人们设置他们不应该的属性.关掉它是一个非常糟糕的主意,我非常非常强烈地建议反对它.
您应该在模型中执行此操作:
class Movie < ActiveRecord::Base
attr_accessible :title
end
Run Code Online (Sandbox Code Playgroud)
这将使只是该title属性为您的Movie对象分配,没有别的能没有被分配without_protection标志或config.active_record.whitelist_attributes设置为设置false.
如果你不注意这个警告,那么Murifox的回答就是你想要的.
想象一下,您有一个表单,用户可以更新其密码.天真无邪.现在假设您已关闭属性保护,并且您的users表上有一个admin字段.
实际上,有人非常容易将页面的HTML保存到他们的计算机,添加一个字段admin然后将其设置为"on"或其他任何内容,然后blammo,他们是您网站的管理员.
您网站的新管理员可以快速有效地对您的应用程序进行政变,使他们声称的"异议数据"消失.在未来几年,这个野蛮的独裁者以某种方式积聚了足够的核材料以形成核武器.他与一个鲜为人知的国家并不相处,比如说苏里南,并向他的军队发起进攻.军队是如何形成的,取决于你的想象力.
成千上万的苏里南人(我不得不抬头看看)要么被杀,要么被迫流入邻国,主要是法国几内亚和圭亚那.一些尝试,使其向巴西的一个,如果不是在南美洲最大的国家,只能通过在丛林中徒步旅行或生物的绝对距离被杀死.
剩下的苏里南军队坚持反对独裁者和他的军队.使用核武器打破了僵局,独裁者将苏里南及其民众的生活添加到他已毁坏的事物清单中.这个清单很短:他毁掉的唯一一件事就是你的申请.
你想要那个意识吗?! 为什么没有人会想到苏里南的属性?!
拜托,求求,请使用attr_accessible.学会喜欢它,否则后果可能会非常可怕.
| 归档时间: |
|
| 查看次数: |
3155 次 |
| 最近记录: |