質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

852閲覧

rails 多対多 中間テーブル レコード 登録方法が分からない

naoki10

総合スコア37

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/07/01 13:20

問題

何をどうやって調べてよいか分からず実装方法が全くわからない、、、、

実現したいこと

###### 特定のユーザにだけ記事表示機能を実装したいです。

そのために、
userモデル (記事を投稿するユーザーのモデル)
groupeモデル(記事のモデル)
を作成し、中間テーブルとしてconectモデルを作成しました。

UserGroupeConect
name: stringname: stringuser_id
--groupe_id

そして下記のように、
throughを使用して多対多の関連付けをしました。
##models/user.rb

class User < ApplicationRecord #groupe_userを通してたくさんのgroupeを持っている has_many :groupes, through: :conects has_many :groupe_users end

##models/groupe.rb

class Groupe < ApplicationRecord #groupe_userを通してたくさんのUserを持っている has_many :users, through: :conects has_many :groupe_users end

##models/conect.rb

class Conect < ApplicationRecord belongs_to :user belongs_to :group end

なにが分からないのか

実現したいことをするために、記事投稿時に、userを選択して中間テーブルにgroupe(記事)のidとuserのidを登録する必要があるかと思ったのですが方法が分かりませんでした。

まずuser_idを複数submitとするために、check_boxを配置したいのですが、分かりませんでした。
次が、user_idを複数取得した前提で中間テーブルに登録する方法が分かりません。

##views/groupes/new.html.erb

<h1>Groupes#new</h1> <%= form_for(@groupe, url: groupes_create_path) do |f| %> <%= f.text_field :title %><br> <%= f.text_area :name %><br> <%=f.fields_for :conects do |i| %> <% @user.each do |g| %> <%= i.check_box :user_id %> <%= g.name %> <%= g.id %> <% end %> <%end%> <br><%= f.submit %> <% end %>

##controllers/groupes_controller.rb

class GroupesController < ApplicationController def new @groupe = Groupe.new() @user = User.all end def create @groupe = Groupe.new(groupe_params) if @groupe.save redirect_to '/groupes/index' else render :new end end def index @groupe = Groupe.all end private def groupe_params params.require(:groupe).permit(:name,:title) end end

# 分からないことばかりで申し訳ございません。 分かる方お見えでしたらご教授下さい、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Ruby

1class User < ApplicationRecord 2 #groupe_userを通してたくさんのgroupeを持っている 3 has_many :groups, through: :conects 4 has_many :conects 5end

Ruby

1class Groupe < ApplicationRecord 2 #groupe_userを通してたくさんのUserを持っている 3 has_many :users, through: :conects 4 has_many :conects 5end

GroupとUserのモデルが間違っているように思えますので、まずこちらを直してみてください。

groupes ⇨ groups
groupe_users ⇨ connects

groupとuserの中間テーブルを作成する場合には、わかりやすいように、group_userというテーブル名がよく使われます。しかし、今回は中間テーブルとしてconnectを使用していますので、こちらに対応付けます。

投稿2019/07/02 12:22

junya451054

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoki10

2019/07/02 14:44

ありがとうございます。 Userは、多のgroupsをconectを通して持っている Userは、多のconectを持っているにしないといけないのですね、、、 分かりやすいです。 修正しました、ありがとうございます。
junya451054

2019/07/03 03:29

お力になれてよかったです。 頑張ってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問