2016-09-02 3 views
-1

Я работаю над Meetip Api. Я хотел бы сохранить некоторые конференции из API в мою базу данных. спасительных конференций зависят от параметров, проходящих в поле зрения к контроллеру:Отправить параметры от контроллера к модели рельсов

<%= link_to 'See conferences', conferences_path(:title => "ParisRb")%> | 

Затем я вызвать хороший метод, чтобы искать хорошие конференции (по сравнению с Params) среди всех один получил от API. Я хотел бы, чтобы методы были очень универсальными и позволяли сохранять любые конференции не только «ParisRb».

Поэтому я изменяю все свои методы в этой цели, но есть один, который я не могу изменить, я не знаю, как это сделать.

Это - весь мой код. Тот, который я хотел бы изменить, - это self.conferences_filter(data), который должен получать параметры от контроллера вместо «ParisRb». Но я знаю, что передача параметров от контроллера к модели не является хорошей практикой. Таким образом, любая идея приветствуется :)

Библиотека/api_meetup.rb

class ApiMeetup 
    BASE_URI = "https://api.meetup.com" 

    def events(urlname) 
    HTTParty.get(BASE_URI + "/#{urlname}/events") 
    end 
end 

conferences_controller.rb

def index 
    #call to the API 
    response = ApiMeetup.new.events(params[:title]) 
    api_data = JSON.parse(response.body) 

    filtered_conferences = Conference.conferences_filter(api_data) 
    conferences = Conference.save_conferences_from_api(filtered_conferences) 

    @conferences = conferences.current_conferences 
    end 

conference.rb

#Keep only requested conferences 
    def self.conferences_filter(data) 
    requested_conferences = [] 
    data.each do |event| 
     if event["name"].include?('ParisRb') #This should receive params[:title] instead of 'ParisRb' 
     requested_conferences << event 
     end 
    end 
    requested_conferences 
    end 

    #Save requested conferences from the Meetup API 
    def self.save_conferences_from_api(conferences) 
    # data = data_from_api 
    conferences.each do |line| 
     conference = self.new 
     conference.title = line['name'] 
     conference.date = format_date(line['time']) 
     conference.url = line['link'] 
     if conference.valid? 
     conference.save 
     end 
    end 
    self.all 
    end 
+1

Я немного запутался. поскольку вы уже запрашиваете 'HTTParty.get (BASE_URI +"/# {urlname}/events ")', возвращаемые события ограничиваются только 'urlname', который является' ParisRb', он не будет включать в себя другие события групп встреч. поэтому нет необходимости снова проверять модель. Если вы не хотите проверять имя события, что вы делаете в методах модели. – lusketeer

+0

О да, вы совершенно правы! В моем коде есть один бесполезный шаг – Orsay

ответ

0

Это было на самом деле совершенно очевидно. мне просто нужно, чтобы перейти к аргументу моему методу:

filtered_conferences = Conference.conferences_filter(api_data, params[:title])

#Keep only requested conferences 
    def self.conferences_filter(data, title) 
    requested_conferences = [] 
    data.each do |event| 
     if event["name"].include?(title) 
     requested_conferences << event 
     end 
    end 
    requested_conferences 
    end 
Смежные вопросы