2015-11-21 3 views
0

Я пытаюсь разобрать статический файл JSON из моего корневого каталога в уже предопределенный объект, но я смущен тем, как заставить объект «читать» каждый атрибут в файле JSON и отображать его как собственный. Надеюсь, я не сделаю это более запутанным из того, что это такое?Разбор статического файла JSON в объект rails

Некоторые из моего кода:

class PostsController < ApplicationController 
    # before_action :set_post, except: [:index, :show] 

    # @@posts = File.read('app/assets/javascripts/flickr_feed.json') 
    # @posts = JSON.parse(string) 

    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.all 
    respond_to do |format| 
     format.html 
     format.json { render json: @@posts } 
     # format.json { render json: @@posts } 
    end 
    end 

    # GET /post/1 
    # GET /post/1.json 
    def show 
    @post = @post.assign_attributes JSON.parse(File.read('app/assets/javascripts/flickr_feed.json')) 
    respond_to do |format| 
     format.html 
     format.json { render json: @post } 
    end 
    end 
    ... 

Если я иду в localhost:3000/posts.json я вижу выход желание ..

{ 
"title": "Recent Uploads tagged potato", 
"link": "https://www.flickr.com/photos/tags/potato/", 
"description": "", 
"modified": "2015-11-21T08:41:44Z", 
"generator": "https://www.flickr.com/", 
"posts": [ // before was "items": 
{ 
    "title": "Hokkaido potato with butter", 
    "link": "https://www.flickr.com/photos/taking5/22873428920/", 
    "media": {"m":"https://farm6.staticflickr.com/5813/22873428920_3cac20cc47_m.jpg"}, 
    "date_taken": "2015-07-18T08:16:24-08:00", 
    "description": " <p><a href=\"https://www.flickr.com/people/taking5/\">Taking5<\/a> posted a photo:<\/p> <p><a href=\"https://www.flickr.com/photos/taking5/22873428920/\" title=\"Hokkaido potato with butter\"><img src=\"https://farm6.staticflickr.com/5813/22873428920_3cac20cc47_m.jpg\" width=\"240\" height=\"180\" alt=\"Hokkaido potato with butter\" /><\/a><\/p> <p>Yummy.<\/p>", 
    "published": "2015-11-21T08:41:44Z", 
    "author": "[email protected] (Taking5)", 
    "author_id": "[email protected]", 
    "tags": "japan hokkaido potato hakodate morningmarket" 
} 
] 
} 
... 

Но если я иду в posts#index я не вижу ничего. Я знаю, что не правильно разбираю данные, но я смущаюсь о том, как это сделать. Любая помощь будет очень высоко оценена. Благодаря

TL; DR: Я хотел бы разобрать каждый пункт из JSON файла так, чтобы быть в состоянии сделать post.title, post.description и т.д.

EDIT 1: Update на код опечаток.

EDIT 2: Обновление на код в контроллере

+0

Подсказка: когда вы делаете 'format.html' он ожидает блок кода (код между фигурными скобками, как у вас есть для' format.json') –

+0

@Sunil D , попробовал то, что вы рекомендовали '' 'format.html {render @posts}' '', но теперь он говорит, что мне не хватает частичного, и когда я создаю частичный '' '<% = render partial: @posts - %> '' 'Я получаю' '' слишком сложную ошибку''' – intercoder

ответ

2

Вы можете попробовать:

@post = Post.new 
@post.assign_attributes JSON.parse(File.read('app/assets/javascripts/flickr_feed.json')) 

Если вы используете protected_attributes камень, атрибуты набора, используя этот способ должен быть определен с attr_accessible в модели или параметр without_protection.

Edit:

def index 
    @posts = 
    JSON.parse(File.read('app/assets/javascripts/flickr_feed.json'))["posts"].inject([]) do |_posts, post_attrs| 
     _posts << Post.new(post_attrs) 
    end 
    respond_to do |format| 
    format.html 
    format.json { render json: @posts } 
    end 
end 
+0

@Mereq, я думал, что attr_accessible устарел в Rails 4 ?? И драгоценные камни '' 'protected_parameters'' кажутся пугающими. – intercoder

+0

В Rails введены 4 сильных параметра, и 'protected_attributes' был перемещен в драгоценный камень. Если вы его не используете, вы можете, конечно, пропустить это уведомление. – Mareq

+0

Я дополнил свой ответ. – Mareq

Смежные вопросы