Tag: 虚拟属性

Rails 4 Minitest测试虚拟属性

所以我有一个类TimeBank,它正在更新,并且正在获得两个新的虚拟属性,它们将操纵另外两个现有属性(DB列)。 class TimeBank < ActiveRecord::Base # validations, consts, few other methods omitted for brevity def date_worked @date_worked ||= self.start.to_date rescue Date.current end def date_worked=(date_worked_val) self.attributes['date_worked'] = date_worked_val end def hours_worked @hours_worked ||= hours rescue NoMethodError nil end def hours_worked=(hours_worked_val) self.attributes['hours_worked'] = hours_worked_val end def hours if attributes["hours"] read_attribute(:hours).to_f else ((finish – start)/1.hour).to_f end rescue NoMethodError […]

Rails 3配置attr_accessible / protected的设置

我花了很长时间试图解决模型中的虚拟属性问题。 原来我只是忘了把它添加到我的模型中的attr_accesible。 当然,我应该早点或更好地抓住它,首先应该通过将它添加到attr_accessible来开始整个过程​​。 为了防止这种情况再次发生,是否有一个配置设置我可以标记为在开发时抛出exception,如果我尝试批量分配并在受保护/不可访问时validation它? 我知道我可以使用set config.active_record.whitelist_attributes = true来要求所有人使用白名单,但我的问题更多的是基于个别属性。 例如,如果我有一个带有attr_accessible的模型,则上面的行不会发出警告:name然后添加:nickname(virtual或not),并尝试批量分配它,检查presence => true。 我希望它警告我,我试图通过质量分配来validation受保护的属性。

在Rails模型中设置和获取虚拟属性

我正在寻找一种方法来解决以下问题: Event模型中的两个datetime属性: start_at: datetime end_at: datetime 我想使用3个字段以表格forms访问它们: event_date start_time end_time 我遇到的问题是如何将实际和虚拟属性保持在“同步”,以便可以通过表单和/或直接通过end_at和end_at更新模型。 class Event < ActiveRecord::Base attr_accessible :end_at, :start_at, :start_time, :end_time, :event_date attr_accessor :start_time, :end_time, :event_date after_initialize :get_datetimes # convert db format into accessors before_validation :set_datetimes # convert accessors into db format def get_datetimes if start_at && end_at self.event_date ||= start_at.to_date.to_s(:db) # yyyy-mm-dd self.start_time ||= "#{'%02d' […]

rails 4中的虚拟属性

我如何在rails 4中使用虚拟属性(getter,setter),因为’attr_accessible’被删除了。 我在这里遇到问题 def tags_list @tags = self.tags.collect(&:name).join(‘, ‘) end 在尝试更新/创建时,我可以达到上述方法,但无法达到下面的setter。 def tags_list=(tags) @tags = tags end

多个字段的单个虚拟属性定义

我想知道是否有办法设置虚拟属性,以便它可以处理多个字段/变量。 基本上,我的模型中有几个不同的整数列(收入,税收),每个我需要检查表单提交时,并删除非法字符,我通过设置虚拟属性并使用tr来删除剥去角色。 def flexible_income income end def flexible_income=(income) self.income = income.tr(‘$ ,’, ”) unless income.blank? end 然后我应该在控制器中设置强参数: params.required(:tax).permit(:flexible_income, :flexible_taxes) 问题是我有很多字段(不仅仅是我上面列出的两个字段),因此对于每个字段,(其中许多只需要检查完全相同的非法字符)我必须使用新的虚拟属性和基本上只是重复相同的代码: def flexible_taxes taxes end def flexible_taxes=(taxes) self.taxes = taxes.tr(‘$ ,’, ”) unless taxes.blank? end 反正只是为许多不同的字段设置一个共同的共享属性,同时仍能设置强参数?

使用Rails中的Devise创建虚拟属性4

我的用户模型没有:name字段,但我想在我的注册表单中包含:name字段,该字段将用于在after_create创建另一个模型的after_create 。 class User < ActiveRecord::Base after_create :create_thing private def create_thing @thing = Thing.new @thing.name = @thing.save! end end 如何从注册表单中获取名称?

在rails中,默认的getter和setter会是什么样子?

我知道我可以编写attr_accessor:tag_list来为Rails中的对象创建一个虚拟属性tag_list。 这允许在对象的表单中存在tag_list属性。 如果我使用attr_accessor:tag_list,我可以在模型中对tag_list执行操作以从表单中提取和操作数据。 我想知道的是,如何编写一个完全复制attr_accessor默认function的getter和setter,而不是编写attr_accessor。 例如: def tag_list #what goes here end 仅供参考我尝试过 def tag_list @tag_list end 这不起作用。