如何将url参数传递给rails3中的模型?

时间:2012-02-03 09:13:22

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

我有一个find_by_sql语句,我试图将位置ID传递给。我以为我可以这样做:

  def self.location_history()
        Location.find_by_sql("select * from locations a INNER JOIN hotspots b ON a.id = b.location_id INNER JOIN accounts c ON b.mac = c.account_id WHERE a.location_id= '#{id}'")
  end

我认为以下内容会从网址中提取id参数:

 a.location_id = '#{id}'

然而,这会引发有关未定义变量的错误。

我可以看到id => '2'参数随请求一起发送,但我不知道如何从模型中调用。如果可能的话?

1 个答案:

答案 0 :(得分:4)

您无法从Rails模型访问“params”哈希。参数仅供您的控制器和视图进行交互。

您可以将控制器所需的值传递给模型,而不是:

def self.location_history(location_id)
  Location.find_by_sql("select * from locations a INNER JOIN hotspots b ON a.id = b.location_id INNER JOIN accounts c ON b.mac = c.account_id WHERE a.location_id= '#{location_id}'")
end

并在控制器中:

def index
  @location_history = Location.location_history(params[:id])
end

或者更好的是,在Rails 3中这样的东西更清晰。此外,这将从SQL注入中转义location_id参数。

def self.location_history(location_id)
  joins(:hotspots, :accounts).where(:location_id => location_id)  
end

您最初不需要“位置”,因为这是当前模型。如果您的关联正确,您可以使用“连接”范围链接这些表,并将您需要的参数传递给“where”,