【发布时间】:2012-03-29 12:00:22
【问题描述】:
我还没有对这个 Jquery-tokeninput 或 Rails 虚拟属性做很多事情,但我一直用这个把头撞到墙上。感谢您提供任何帮助或指导。
我的公告模型中有一个虚拟属性读取器,我需要验证是否存在:
attr_reader :classroom_tokens
validates :classroom_tokens, :presence => true``
接着是getter和setter:
def classroom_tokens=(ids)
self.classroom_tokens = ids.split(",")
end
def classroom_tokens
#Tried several things here
end
我真的只需要确保 params[:announcement][:classroom_tokens] 不为空。上面的 validate 调用似乎在看别的东西,因为无论如何它总是空的。我错过了什么?非常感谢任何帮助。
导轨 3.1 红宝石 1.9.2
更新: 如果我这样做了
#Announcement MODEL
attr_reader :classroom_tokens
#validates :classroom_tokens, :presence => true
def classroom_tokens=(ids)
@classroom_tokens = ids.split(",")
end
#Announcement_controller create action
puts "Token=>#{@announcement.classroom_tokens}|"
puts "Params=>#{params[:announcement][:classroom_tokens]}|"
我明白了:
Token=>|
Params=>7,13,12|
【问题讨论】:
-
验证发生在模型上。模型不应该对用于构建它们的参数一无所知。 class_tokens 要么存在,要么不存在。尝试在 ActiveRecord 对象上添加自己的 setter/getter 方法会使事情复杂化,因为 ActiveRecord 正在尝试为您执行此操作。如果您需要从 comma_delineated 数组中设置教室标记,请为此使用不同的方法。如果您需要特殊的 getter,请将其命名为属性名称以外的其他名称。
-
感谢您的回复。由于classic_tokens 是一个虚拟属性,我在那里添加了setter 只是为了帮助完成comma_delineated 分配,并且一直觉得我在搞乱getter。二传手工作得很好。我所做的也是完全阅读 getter 和 setter,但仍然遇到同样的问题,它认为它总是空的。
标签: ruby-on-rails virtual-attribute jquery-tokeninput