草庐IT

accessors

全部标签

ruby - 将 attribute_accessor 添加到 Ruby 中的单个实例

我有以下代码将实例变量添加到单个实例:classMyClassdefinitialize(x)@var=xendendobj=MyClass.new(4)obj.instance_variable_set(:@a,5)我可以为属性动态添加attr_accessor以便我可以使用obj.a和obj.a=...还是我必须使用instance_variable_get和instance_variable_set来获取和设置它吗? 最佳答案 您可以将attr_accessor发送到对象的单例类:obj=MyClass.new(4)obj.s

ruby - `attr_accessor`/`attr_reader` 创建实例变量是什么意思?

attr_accessor的文档明确地说它创建了一个实例变量:[...]creatinganinstancevariable(@name)andacorrespondingaccessmethod[...]attr_reader的文档也是如此:Createsinstancevariablesandcorrespondingmethods[...]我理解第二部分,即attr_accessor和attr_reader创建方法,但我不明白第一部分。他们“创建实例变量”是什么意思? 最佳答案 这是文档中的错误/误导性措辞。attr_read

ruby-on-rails - rails : attr_accessor doesn't show up when try to render as JSON

在我的应用程序中,我有一个模型如下;classInit在这里,当我稍后添加了**attr_accessor**并尝试应用**renderjson:init**时,它不显示**clientAvailability**属性,即使我已经设置它作为;init=Init.newinit.clientAvailability="3"当我调试它时,我可以看到它已设置,但当我尝试将它呈现为json时,它并没有简单地显示出来。我可能遗漏了什么? 最佳答案 clientAvailability是数据库中的一列吗?如果没有,那么我认为这是默认方式-仅序列

ruby-on-rails - rails : Attr accessor undefined method in the setter

我在用户模型中有这行代码:attr_accessor:birthdate在同一个模型中,我有一个尝试通过这样做来设置生日的方法:self.birthdate=mydate其中mydate是一个Date对象。我收到此错误:undefinedmethodbirthdate='为什么会这样?attr_accessor不是创建了setter和getter吗? 最佳答案 让我猜猜,您是从类方法中调用setter的,对吧?classFooattr_accessor:bardefset_barvalself.bar=val#`self`isani

ruby - attr_accessor 是否需要在 Ruby 中使用符号作为变量?

我见过的每个attr_accessor示例都使用一个符号(:var)作为变量。这是使用attr_accessor的要求吗?如果是,为什么?如果不是,为什么这种做法如此普遍? 最佳答案 Module#attr_accessorattr_accessor(symbol,...)→nilattr_accessor(string,...)→nil(newlyintroducedinRuby2.1)Definesanamedattributeforthismodule,wherethenameissymbol.id2name,creating

ruby - 无法批量分配 protected 属性 attr_accessor 和 attr_accessible

在rails2.3.11中,我有以下模型attr_accessor:person_id在Controller中@project.person_id=current_user.id现在,我在rails3.2.11中转换它,我得到了Can'tmass-assignprotectedattributes:person_id所以我改变了模型,我从attr_accessor中删除了:person_id并添加了下面一行attr_accessible:person_id但我在Controller中使用了person_id,就在这里@project.person_id=current_user.id我

ruby - YARD:记录自定义 getter/setter 对,如 attr_accessor

我正在使用YARD来记录我的项目。使用创建的YARD文档属性attr_accessor:some_attribute在单独的部分“实例属性摘要”中。现在我有了另一个属性,但是有自定义的setter和getterdefsome_other_attribute#...enddefsome_other_attribute=value#...end所以基本上我的问题是,我怎样才能让YARD记录这对setter/getter,就像之前案例中的attr_accessor一样,并在“Instance”中列出some_other_attribute属性汇总”? 最佳答案

ruby-on-rails - ActiveSupport 中 mattr_accessor 和 cattr_accessor 的区别?

我无法从源代码中找出类和模块中分别提供的cattr_*和mattr_*方法之间的区别。我读了这个问题:Whatismattr_accessorinaRailsmodule?其中提供了有关这两种方法的一些详细信息,但没有突出显示差异。所以我的问题是它们之间有什么区别,为什么我们需要两组方法,因为它们在源代码中实际上是相同的?另外,我们什么时候应该使用哪个? 最佳答案 Module是类Class的父类(superclass),因此如果可以想到一个合适的通用名称,则可以将定义访问器的方法放在Module并且它适用于模块和类。请注意以下工作

ruby - 在 Ruby 中,如何从正在扩展的模块中应用 attr_accessor?

我正在尝试通过将方法组织到单独的模块中来模块化一些Ruby代码。最初我有这样的东西:classJoeattr_accessor:namedefself.arms2enddefself.legs2endend我试过这样做:classJoeextendPersonendmodulePersonincludeNameincludeArmsincludeLegsendmoduleNameattr_accessor:nameendmoduleArmsdefarms2endendmoduleLegsdeflegs2endend但是,不工作的部分是attr_accessor。我已经尝试了includ

ruby-on-rails - 包含 InstanceMethods 模块时覆盖 attr_accessor 的 setter 方法

我有一个ActiveRecord扩展(缩写):moduleHasPublishDatesdefself.included(base)base.send:extend,ClassMethodsendmoduleClassMethodsdefhas_publish_dates(*args)attr_accessor:never_expireincludeInstanceMethodsendendmoduleInstanceMethodsdefnever_expire=(value)@never_expire=ActiveRecord::ConnectionAdapters::Column.