プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】「cocoon」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】「cocoon」について

11.16

  • miyabisan2
  • コメントを書く

この記事は1分で読めます

cocoonとは?

親子孫関係のテーブルに複数のデータを同時に保存できるようにできるにするためのビューに拡張性を持たせるためのGemです。

モデルの指定(cocoonとは直接関係ない)

1
2
3
4
class 親モデル < ApplicationRecord
  has_many :子モデル, dependent: :destroy
  accepts_nested_attributes_for :子モデル, allow_destroy: true
end

accepts_nested_attributes_for

Railsが標準で提供しているActiveRecordのメソッドです。cocoonとは直接関係ないですが一緒に使われるケースが多いです。指定することで、親モデルのコントローラーのparamsに「{子モデル}_attributes」という形でパラメータを追加することができます。

具体的には下記のようになります。さらに入れ子にすることも可能です。

1
        params.require(:親モデル).permit(:親のカラム1,子モデル_attributes: [:id,:子のカラム2,:_destroy])

一つのビューで複数のモデルを使う方法

fields_for

これも、cocoonとは関係ないですが親モデルに関連する子モデルを使いたい場合はfields_forを使うと便利です。

1
2
3
4
<%= form_with(model: @親モデル, local: true) do |s| %>
    <%= s.fields_for :子モデル do |t| %>
    <% end %>
<% end %>

cocoonで用意されているメソッド

link_to_add_association

子要素を一つ追加するためのリンクをviewに追加できます。

1
<%= link_to_add_association "ラベル", 親フォーム, :子モデル,data:{association_insertion_node:'追加対象のclass',association_insertion_method:'メソッド'} %>

なお、「association_insertion_node」や「association_insertion_method」を使うことでどこに子要素を追加するかを細かく指定することができるようです。

link_to_remove_association

モデルを削除するためのリンクをviewに追加できます。

1
<%= link_to_remove_association "ラベル", 削除対象のモデル %>

なお、上記メソッドをRails6以降で動作させようとした場合は下記の手順を実行する必要があるので注意。

https://qiita.com/ashketcham/items/87e3db665ca9c66ce673

スポンサーリンク
  • 2020 11.16
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 12.01

    【Rspec】FactoryBotでデータを準備する。

  2. 2019 12.07

    【Ruby on Rails】「ページング」の実装(kaminari)

  3. 2021 01.30

    【Ruby on Rails】「Enumrize」について

  4. 2020 03.15

    【Ruby on Rails】「フィクスチャ」について

  5. 2019 12.03

    【Ruby on Rails】アセットパイプラインについて

  6. 2020 12.26

    【Ruby on Rails】「serialize」や「store」について

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Kubernetes】基本的な用語

【Ruby on Rails】「主キー」、「複合キー」…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー