Rails:Where子句在任何条件下都不起作用

时间:2012-09-11 08:31:14

标签: ruby-on-rails select rails-activerecord crud

由于简单的Rails where 查询,我即将失去理智。我简直无法理解为什么它像10行前一样工作而不是在它之后。我无法弄清楚可能导致问题的原因

@userID = Token.where(:tokenCode => @tokenReceived)
  #@init.tokenCode=@tokenReceived+"1" #randomize algorithm required!
  @init.tokenCode=@codeGenerated=generate_activation_code()
  if @userID.nil?
    @newToken=Token.new
    @newToken.tokenCode=@codeGenerated
  else
    @tokenToAdd = "12"
    @newToken=Token.where(:userID => "1")
    #if @newToken.nil?
      @newToken.tokenCode="12"
    #end
  end
  #@newToken.save  
  @init.save

当我向'http:// localhost:3000 / inits.json'发出成功的JSON请求时,它给了我一个包含大量错误的页面,但我认为其中的主要错误是:

<h1>
  NoMethodError
    in InitsController#create
</h1>
<pre>undefined method `tokenCode=&#x27; for #&lt;ActiveRecord::Relation:0x007fc43cb40b88&gt;</pre>

可能是什么原因?我写的where子句都错了吗?

编辑:当我激活if子句时,它可以工作。我只是相信@newToken对象是null,但是我几乎不可能检测到原因。我的令牌表中有一个数据 userID 1。

1 个答案:

答案 0 :(得分:2)

当你这样做时:

 @newToken=Token.where(:userID => "1")

你得到一个ActiveRecord::Relation,但你期望一个对象。所以只需将其替换为:

 @newToken=Token.where(:userID => "1").first