- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Rails 第 4 版(Rails 3.2+)进行敏捷 Web 开发,并且有一个关于 migraitons 的问题。有一个练习,我必须在现有表中添加一列,然后用值更新该新列。我需要在“line_items”表中添加一个“价格”列。首先我生成了迁移:
rails generate migration add_price_to_line_items price:decimal
然后我编辑了迁移文件:
class AddPriceToLineItems < ActiveRecord::Migration
def change
add_column :line_items, :price, :decimal
LineItem.all.each do |li|
li.price = li.product.price
end
end
def down
remove_column :line_items, :price
end
end
一切都按计划进行,但是,我对 attr_accessible 有疑问。据我了解,需要在 attr_accessible 中指定对象的所有属性才能进行编辑。如果不是,您通常会收到此错误:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: product
因此,所有属性都必须设置为关联模型中 attr_accessible 的参数:
class LineItem < ActiveRecord::Base
**attr_accessible :cart_id, :product_id, :quantity**
belongs_to :cart
belongs_to :product
def total_price
product.price * quantity
end
end
如果这是真的,那么我的迁移如何能够更新新生成的列?如果该列刚刚生成,则该新属性还不会在关联模型的 attr_accessible 中指定。任何和所有输入将不胜感激。
最佳答案
基本上是因为在 Rails 表单中,您可以向表单添加任何字段。如果用户向表单添加新参数并将其提交到您的服务器,这会给您带来很大的问题。
像这样:
你的 Controller :
LineItem.create(params[:line_item)
如果这是您的 Controller ,则用户插入(通过 javascript 或通过 chrome 上的控制台编辑)一个新的文本字段,他可以修改 protected 字段。
这就是为什么我们使用 attr_accessible
只允许定义的字段。
因此 attr_accessible
中没有的属性仍然可以访问,只是无法进行批量分配。
你仍然可以这样做:
模型有姓名、时间和日期:
attr_accessible :name, :time
Controller 或任何类:
您可以:
m = Model.new(:name => "name", :time => "time")
m.date = "date"
m.save
你不能:
m = Model.new(:name => "name", :time => "time", :date = "date")
m.save
如果您仍然不明白,请查看此链接 http://ruby.railstutorial.org/chapters/modeling-users#sec:accessible_attributes它有很好的解释
关于ruby-on-rails - 迁移中的 attr_accessible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560625/
我正在使用魔法 gem 进行身份验证。我实际上已经在另一个项目中使用它没有任何问题,但我突然遇到了一个奇怪的情况。我的模型是最初生成的魔法用户模型,没有任何attr_accessible。 现在,我有
使用参数: {"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"mZ0yUwkdUhi8JVeXfPPzukYr8QfmJjC0UptG3
我找不到任何新手教程。没有任何使用 attr_accessible 的简单规则吗?我应该将它用于用户可以从表单设置的属性吗? 如果可以从表单设置所有属性会怎样? 如果有链接或简短建议,我将不胜感激。我
我正在使用 Rails 第 4 版(Rails 3.2+)进行敏捷 Web 开发,并且有一个关于 migraitons 的问题。有一个练习,我必须在现有表中添加一列,然后用值更新该新列。我需要在“li
我正在使用 Rails 第 4 版(Rails 3.2+)进行敏捷 Web 开发,并且有一个关于 migraitons 的问题。有一个练习,我必须在现有表中添加一列,然后用值更新该新列。我需要在“li
我正在使用 Ruby on Rails 3.0.9,我想知道 attr_accessible 方法在哪些情况下(即对于哪些方法)有效。例如,如果我使用 attr_accessible :name, :
今天早上我醒来时遇到了一个奇怪的问题,mongoid 正在为模型中未定义的属性创建记录 为了克服这个问题,我决定实现 attr_accessible 也在 Mongoid 中提到 specificat
我对 Rails 有点陌生,我正在尝试创建一个用户登录。我通过教程找到了here .最后它让我为批量分配添加“attr_accessible”。但是,当我这样做时,出现以下错误: undefined
我正在 Rails 和面向对象编程中迈出第一步。 我想了解一些非常基本的东西:为什么我们需要 attr_accessible模型内? 我读过黑客可以使用批量分配来更改数据库条目,从而危及安全,这就是为
在 Ruby 1.8.6 中,我可以写 class PerformableMethod Struct.new(:asdf, :qwer) == Struct.new(:asdf, :qwer) =
我对在 Rails 中使用 attr_accessible 有疑问。 我有时想将 guard_protected_attributes 设置为 false 以绕过批量分配保护。我想知道为什么以下行不起
我正在使用 Ruby on Rails v3.2.2,我想处理一个符号数组,以便将它的值传递给 attr_accessible 方法制作。也就是说,我有: attr_array = [:one, :t
我正在尝试创建某种登录。我创建了一个用户脚手架,并将这段代码放在我的 user.rb 中 class User Extracted source (around line #2): 1 2 3 4
我正在尝试将身份验证系统添加到我的应用程序中,但在运行“rake db:migrate”时遇到了这个错误: NoMethodError: undefined method `attr_accessib
有没有一种方法可以为多个角色声明 attr_accessible 而无需大量重复? 如果我有多个用户角色,并且允许每个角色编辑不同的属性子集,那么我的 attr_accessible 声明如下所示:
我的模型包含一个“管理”字段,它是真或假。它不在“attr_accessible”上,因为我们不希望坏人能够欺骗我们的 Controller 向用户提供“管理员”权限。 因为,如果我在我的模型中以管理
我正在实现一个很棒的插件,我发现它可以根据用户行为向用户奖励积分/徽章/排名。它被称为优点,可以在这里找到:https://github.com/tute/merit 我有两个模型:“发布”和“标签”
attr_accessible 似乎不再在我的模型中工作。 Rails 4 中允许批量分配的方法是什么? 最佳答案 Rails 4 现在使用 strong parameters . 保护属性现在是在
下面的代码在后台会发生什么? class User < ActiveRecord::Base attr_accessor :name attr_accessible :name end 提示:实例
我正在使用 Rails3 Edge 和 mongoid 2beta6 以及 ruby 1.9.2-head。 如何手动更改表名称,就像 ActiveRecord 的 set_table_name
我是一名优秀的程序员,十分优秀!