1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jbuilderの基本

Last updated at Posted at 2021-02-08

筆者はRails + Vue.jsを使っていますがjQueryでもJbuilderの設定は同じだと思います

Vueファイルにアソシエーション先の情報(今回はツイートの投稿者)を取ってきたいけど
JSでは以下(4行目)では取ってくることができません

.vue
<template>
  <div id="app">
    <div v-for="e in tweets" :key="e.id">
      {{e.user.name}} <!--投稿者-->
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data: function() {
    return {
      tweets: []
    }
  },
  mounted() {
    axios
    .get('/api/v1/tweets.json')
    .then(response => (this.tweets = response.data))
  }
}
</script>

そこでjbuilderを使います

##コントローラー
筆者はapiを使っています
app > controller > api > v1 > tweet_controller
3行目はindex.json.jbuilderファイルを参照します、というような記述です

.rb

def index
  @tweets = Tweet.all
  render 'index', formats: 'json', handlers: 'jbuilder'
end

##jbuilder
app > views > api > v1 > index.json.jbuilder
tweet.user.nameをvueファイル内ではxx.nameという記述で使えるようにする

.rb
json.array! @tweets do |tweet|
  json.name tweet.user.name
end

##Vueファイル
これでe.nameで投稿者を表示できる

.vue

<template>
  <div id="app">
    <div v-for="e in tweets" :key="e.id">
      {{e.name}} <!--投稿者(tweet.user.name)と同じ意味-->
    </div>
  </div>
</template>

以下略
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?