了解Arel更好

时间:2010-06-19 17:14:55

标签: ruby-on-rails

我有一个before_filter来设置一个arel关系,但是如果我在方法中先调用它就不喜欢它了。它似乎在控制台中工作正常。我在这里缺少什么?

class TeamsController < ApplicationController
  before_filter :find_team

  def show
    @team.first
  end

  private

  def find_team
    @team = Team.where(:id => params[:id])
  end
end

3 个答案:

答案 0 :(得分:1)

where方法返回关系,而不是对象。要获取对象,请使用first方法从关系中返回对象(或nil)。

def find_team
  @team = Team.where(:id => params[:id]).first
end

first方法不会更新关系 - 它会在关系上调用时返回一个对象。

答案 1 :(得分:0)

有一个错误,我不知道这是不是一个错字。

def TeamsController < ApplicationController

应该是

class TeamsController < ApplicationController

关于此问题,请记住您可以在单个记录而不是数组上迭代任务。 换句话说

@team = Team.where(:id => params[:id])

@team.first.tasks # => OK
@team.tasks # => Not OK, you're trying to call tasks on an Array

答案 2 :(得分:0)

您将调用的结果丢弃到first。你想做类似的事情:

  def show
     @team = @team.first
  end