【问题标题】:Rails 3: Controller returns class method nilRails 3:控制器返回类方法 nil
【发布时间】:2012-08-21 11:50:20
【问题描述】:

所以我得到了这个类方法:

  def self.auth(id, key_code_in)
    post = Post.where(:id => id).first   
    if post.key_code == key_code_in
      post
    else
      nil
    end   
  end

它喜欢控制台:

1.9.3p194 :001 > authtest = Post.auth('5032f3254ff9fcf10100001b', 42745590875)
=> #<Post _id: 5032f3254ff9fcf10100001b, _type: nil, created_at: 2012-08...

但讨厌控制器:

  #GET posts/:id/remove_form
  def remove_form
  end

  #POST posts/:id
  def code
    @id = params[:id]
    @key = params[:destroy_code]    
    @post = Post.auth(@id, @key)

    render :text => params[@post].inspect
  end

每次都让我为零。我确保参数是从视图 form_tag 传递的,它们是。所以排除这一点......到底发生了什么?大量赞成票将不胜感激任何帮助。

【问题讨论】:

  • 顺便说一句 auth 在其当前形式中会失败,如果在 db 中不存在 id 提供的 nil:NilClass` 的异常 NoMethodError: undefined method key_code'。以这种方式增强if 会有所帮助:if post &amp;&amp; post.key_code == key_code_in

标签: ruby-on-rails ruby-on-rails-3 controller mongoid


【解决方案1】:

我想我明白了!

您为什么访问 params[@post] ?这个方法的结果应该只是在@post中。

【讨论】:

    【解决方案2】:

    参数不是字符串吗(您的比较需要一个整数)。

    您可以使用 to_i 方法进行转换。

    【讨论】:

    • 是的,先生,我的关键变量是一个整数。感谢您的快速答复!我尝试将 .to_i 绑在 key_code_in.to_i 的背面,现在我可以将 '' 放在控制台中的代码周围,但在控制器中它仍然返回 nil。有什么想法吗?
    【解决方案3】:

    试试这个, 如果您正确使用 id。

    定义代码 @id = 参数[:id].to_i @key = 参数[:destroy_code]
    @post = Post.auth(@id, @key)

    render :text => @post.inspect
    

    结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2011-09-02
      相关资源
      最近更新 更多