2016-07-30 6 views
0

Я работаю над приложением для продуктов в рубине на рельсах, которое требует, чтобы получить значение калорийности пищи из пищи api. В моем контроллере я получаю ответ JSON, но я неспособный разобрать и отобразить значение калорийности пищевого продукта в файле index.html.erb, вот мой код контроллера.как отображать json и parse json в ruby ​​с помощью httparty

require 'rubygems' 
require 'httparty' 

class FoodsController < ApplicationController 

    def index 
    @foods = Food.all 
    end 

    def show 
    @food = Food.find(params[:id]) 
    end 

    def new 
    @food = Food.new 
    end 

    def edit 
    @food = Food.find(params[:id]) 
end 

def create 
    @food = Food.new(food_params) 

    @response = HTTParty.get('http://api.nutritionix.com/v1_1/search/'[email protected]+'?fields=item_name%2Citem_id%2Cbrand_name%2Cnf_serving_size_unit%2Cnf_calories%2Cnf_total_fat&appId=696d1ad4&appKey=aec2c4766d40d7f6346ed89d5d82fe75') 
    @http_party_json = JSON.parse(@response.body) 

    if @food.save 
    redirect_to foods_path 
    else 
    render 'new' 
    end 
end 


def update 
    @food = Food.find(params[:id]) 

    if @food.update(food_params) 
    redirect_to @food 
    else 
    render 'edit' 
    end 
end 

def destroy 
    @food = Food.find(params[:id]) 
    @food.destroy 

    redirect_to foods_path 
end 

private 
def food_params 
    params.require(:food).permit(:name, :quantity) 
end 

end 

Любые предложения приветствуются, поскольку я новичок в stackoverflow, поэтому не знаю, как правильно отредактировать простить, пожалуйста! помогите мне, как отображать значение калорий в HTML странице

+0

действие, которое вы хотите просмотреть данные в? index –

+0

@ mohamed-ibrahim спасибо за редактирование. Я хочу извлечь значение калорийности пищевого продукта, например молока в этом URL-адресе https://api.nutritionix.com/v1_1/search/Milk?fields=item_name%2Citem_id%2Cbrand_name% 2Cnf_serving_size_unit% 2Cnf_calories% 2Cnf_total_fat & APPID = 696d1ad4 & appKey = aec2c4766d40d7f6346ed89d5d82fe75 и отображать значение калорий в index.html.erb файл – coder

+0

@ Mohamed-Ibrahim в создании действия после того, как объект пищи создаются – coder

ответ

0

Вы можете добавить новую функцию Food модели, чтобы получить Вас Калории:

class Food 

def calorie 
    response = HTTParty.get("http://api.nutritionix.com/v1_1/search/#{self.name}?fields=item_name%2Citem_id%2Cbrand_name%2Cnf_serving_size_unit%2Cnf_calories%2Cnf_total_fat&appId=696d1ad4&appKey=aec2c4766d40d7f6346ed89d5d82fe75") 
    json = JSON.parse(response.body) 
end 
end 

, а затем просто в вашем index.erb, если вы цикл над foods коллекции вы делаете следующее:

<% @foods.each do |food| %> 
    <%= food.name %> 
    <%= food.calorie %> 
<% end %> 

, но в этом случае производительности не будет хорошо, как и вы удаленный доступ для каждого элемента каждый раз, когда вы отображение данных, так калорийность всегда одинакова для того же пищи, то после его созданный год и можно сделать удаленный запрос и сохранить калории, чтобы calorie атрибут в вашей Food модели

Вы можете сделать следующее:

class Food < ActiveRecord::Base 
    before_create :set_calorie 

    private 
    def set_calorie 
    response = HTTParty.get("http://api.nutritionix.com/v1_1/search/#{self.name}?fields=item_name%2Citem_id%2Cbrand_name%2Cnf_serving_size_unit%2Cnf_calories%2Cnf_total_fat&appId=696d1ad4&appKey=aec2c4766d40d7f6346ed89d5d82fe75") 
    self.calorie = JSON.parse(response.body) 
    end 
end 
+0

я не определен калорийность в модели продуктов питания, когда я сконструировал так, чтобы она давала ошибку при еде. Калорие можно добавить сейчас? – coder

+0

Я новичок в рубиновом обучении по учебникам, также нет полезных и легких обучающих программ :( – coder

+0

проверить http://api.rubyonrails.org/classes/ActiveRecord/Migration.html это будет «rails g migration add_calorie_to_foods calorie: float ' –