虚拟属性验证Rails 3

时间:2012-03-13 03:36:51

标签: ruby-on-rails virtual-attribute jquery-tokeninput

我没有用这个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]不是空的。上面的验证调用似乎正在寻找其他东西,因为无论如何它总是空的。我错过了什么?非常感谢任何帮助。

Rails 3.1 Ruby 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|

1 个答案:

答案 0 :(得分:8)

不要设置self.classroom_tokens,只需设置实例变量@classroom_tokens,然后删除classroom_tokens方法,因为您使用attr_reader隐式定义它。代码应如下所示:

attr_reader :classroom_tokens
validates :classroom_tokens, :presence => true``

def classroom_tokens=(ids)
    @classroom_tokens = ids.split(",")
end