- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Ruby 1.8.6 中,我可以写 class PerformableMethod < Struct.new(:object, :method, :args)
现在在 Ruby 1.9.3 中,会抛出一个错误:superclass mismatch for class PerformableMethod
如果我将代码更改为:
class PerformableMethod
attr_accessor :object, :method_name, :args
但为什么结构不起作用?
最佳答案
类名在 1.9 和 2.0 中也是可选的。问题是这样的:
> Struct.new(:asdf, :qwer) == Struct.new(:asdf, :qwer)
=> false
即使您为Struct
提供类名:
> Struct.new("Zxcv", :asdf, :qwer) == Struct.new("Zxcv", :asdf, :qwer)
(irb):22: warning: redefining constant Struct::Zxcv
=> false
这意味着如果你在加载或需要的文件中有这个:
class MyClass < Struct.new(:qwer, :asdf)
def some_method
puts "blah"
end
end
...然后如果您再次加载它——可能是因为您更改了一些东西并且您想在不重新启动 irb 的情况下尝试它,或者您可能在开发模式下运行 Rails 并且它会在每个请求时重新加载类——那么您会得到异常:
TypeError: superclass mismatch for class MyClass
... 因为每次您的类定义运行时,它都会声明一个全新的 Struct
作为 MyClass
的父类(super class)。向 Struct.new()
提供类名没有帮助,如第二个代码块所示;这只是添加了关于重新定义常量的警告,然后无论如何打开类都会失败。
避免异常的唯一方法是将您的 Struct
存储在您控制的某个地方的常量中,并确保在重新加载文件时不要更改该常量。
关于ruby - 从 Struct 子类化与使用 attr_accessible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10759122/
我正在使用魔法 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
我是一名优秀的程序员,十分优秀!