■
SQLで中間テーブルを含めて3つのテーブルを結合してみた
今回結合したのは、
Posts、Tags、PostTagRelationsの3つのテーブル
最終目的:Tagsテーブルのnameカラムのvalueの値
3つのテーブル結合した図
select * の部分*(ワイルドカード” * ”を指定)で全てを指定している
gyazo.com
カラムをPosts.nameとTags.name指定してみた図
だいぶすっきり
gyazo.com
実際には、select t.name form~だけでいいのでさらに絞ってます
rails cで見てみる
- 実際に値を取得し、変数sqlに代入
- モデル.find_by_sql(変数)で出力する =>配列になってる gyazo.com
- 変数に手順2のfind_by_sqlを代入する
- 変数[0].カラム名で出力する =>今回は,@tag_name[0].name
posts.controller.rb
def edit @post = Post.find(params[:id]) //@form = PostsTag.new(title: @post.title, article_text: @post.article_text, status_id: //@post.status_id, category_id: @post.category_id, user_id: current_user.id, post_id: @post.id,image: @post.image) sql = "SELECT t.name FROM posts p JOIN post_tag_relations ptr ON p.id = ptr.post_id JOIN tags t ON ptr.tag_id = t.id WHERE p.id = #{@post.id}" Tag.find_by_sql(sql) end
text_fildeにvalue: @tag_name[0].nameで表示させました
edit.html
<%= form_with model: @form, url: post_path, method: :put, local: true do |f| %> <div class="tag-field", id='tag-field'> <%= f.label :name, "タグ" %><br /> <%= f.text_field :name, value: @tag_name[0].name,class:"input-tag" %> </div> <div id="search-result"> </div> <% end %>