Как можно передать параметр url модели в rails3? - PullRequest
1 голос
/ 03 февраля 2012

У меня есть оператор find_by_sql, которому я пытаюсь передать идентификатор местоположения.Я думал, что мог бы сделать что-то вроде этого:

  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 из URL:

 a.location_id = '#{id}'

Однако это выдает ошибку о неопределенной переменной.

Я вижу, что параметр id => '2' отправляется с запросом, но я не знаю, как вызвать модель.Если вообще возможно?

1 Ответ

4 голосов
/ 03 февраля 2012

Вы не можете получить доступ к хэшу "params" из модели Rails. Параметры только для вашего контроллера и представления для взаимодействия.

Вместо этого вы можете передать нужное значение из контроллера в модель с помощью чего-то вроде этого:

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 намного чище. Кроме того, это исключит параметр location_id из внедрения SQL.

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

В начале вам не нужно указывать "Местоположение", потому что это текущая модель. Если ваши ассоциации верны, вы можете использовать область «соединения», чтобы связать эти таблицы и просто передать нужный параметр «где»,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...