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

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

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

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

受付中

新規投稿にセレクトボックスを用いて、カテゴリー機能を実装したい

susume
susume

総合スコア12

Ruby on Rails 5

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1回答

0評価

0クリップ

411閲覧

投稿2020/08/26 05:45

編集2022/01/12 10:55

前提・実現したいこと

新規投稿をするときに、セレクトボックスを用いて、カテゴリー機能を実装したいです。

##状況
railsで個人アプリを開発中で、スノボー版インスタグラムを作成しています。

現在の状況としては、投稿機能はカテゴリー以外は実装されています。
(image,text,titleなど)

また、中間テーブルであるpost_categoryテーブルの紐付けがうまく行っていないのか、新規投稿される時にpost_idとcategory_idはデータベースに登録されずです。

以下がビューの画像です。
イメージ説明

該当のソースコード

posts/new.html.haml

ruby

- if @post.errors.any? .alert %ul - @post.errors.full_messages.each do |message| %li= message #account-page.account-page .account-page__inner.clearfix .post-new-edit-page = render partial: 'form'

_form.html.haml

= form_for(@post) do |f| .field .field-label = f.label :title, "snowB" .field-input = f.text_field :title .field .field-label = f.label :body, "ココがポイント!" .field-input = f.text_area :body .field .field-label = f.label :image, "snowB写真" .field-input = f.attachment_field :image .field .field-label = f.label :category, "カテゴリーを選択してください" .field-input = f.select :category_ids, options_for_select( @category_parent_array.map{|c| [c, {}]}), {}, {class: "parent_select", id: "parent_category"} .actions = f.submit "投稿する", class: "btn"

posts_cotllor.rb

class PostsController < ApplicationController before_action :authenticate_user!, except: [:index] before_action :set_category, only:[:new, :create] def index @posts = Post.all @category_parent_array = Category.where(ancestry: nil) end def show @post = Post.find(params[:id]) @comment = Comment.new @comments = @post.comments.includes(:user) end def new @post = Post.new end def get_category_children @category_children = Category.find("#{params[parent_id]}").children end def create @post = Post.new(post_params) @post.user_id = current_user.id if @post.save redirect_to post_path(@post), notice: '投稿されました' else render :new, alert: '投稿できませんでした' end end def edit @post = Post.find(params[:id]) if @post.user != current_user redirect_to posts_path, alert: '不正なアクセスです' end end def update @post = Post.find(params[:id]) if @post.update(post_params) redirect_to post_path(@post), notice: '投稿が更新されました' else render :edit end end def destroy post = Post.find(params[:id]) post.destroy redirect_to posts_path end private def post_params params.require(:post).permit(:title, :body, :image, { post_categories: {} }) end def set_category @category_parent_array = [] Category.where(ancestry: nil).each do |parent| @category_parent_array << parent.name end end end

mysqlのデータベース関連
イメージ説明
イメージ説明
イメージ説明

##アソシエーション
post.rb

class Post < ApplicationRecord belongs_to :user attachment :image has_many :favorites, dependent: :destroy has_many :comments with_options presence: true do validates :title validates :body validates :image end has_many :post_categories, dependent: :destroy has_many :categories, through: :post_categories accepts_nested_attributes_for :categories, allow_destroy: true end

category.rb

class Category < ApplicationRecord has_ancestry has_many :post_categories, dependent: :destroy has_many :posts, through: :post_categories end

post_category.rb

class PostCategory < ApplicationRecord belongs_to :post belongs_to :category end

db/seeds.rb

snowboard = Category.create(name: "スノーボード") snowboard_1 = snowboard.children.create([ {name: "BURTON"}, {name: "K2"}, {name: "SALOMON"}]) snowboots = Category.create(name: "ブーツ") snowboots_1 = snowboots.children.create([ {name: "BURTON"}, {name: "DEELUXE"}, {name: "FLUX"}])

足りない情報があれば教えてください。

なんでカテゴリーが登録されないんでしょうか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

winterboum

2020/08/27 00:07

関連定義ではcategoryなのにviewでは親子が顔を出します。 関連との関係がわからない。
susume

2020/08/27 12:24

関連との関係が分からないとのことですが、私は的確な回答をもらうためにどのような情報を追記すればよろしいでしょうか?
winterboum

2020/08/27 12:42 編集

_category.html.haml の -@parent_categories. @default_child_categories はどこから来てますか? PostCategory の belongs_to :category と parent_categories. child_categories はどういう関係にありますか PostCategory の category_id には _category.html.haml のどの要素の値を入れますか
susume

2020/08/27 15:50

回答いたします。 >>_category.html.haml の -@parent_categories. @default_child_categories はどこから来てますか? →postsコントローラーからきています。質問内容に追記いたしました。 >>PostCategory の belongs_to :category と parent_categories. child_categories はどういう関係にありますか →モデルやアソシエーションはどうなっているかという質問でしょうか? それならば、parent_categories. child_categoriesのモデルは作成しておりませんし、アソシエーションもありません。 理由は、gem ancestryでカテゴリーを階層構造にしているので、その必要はないと判断したからです。 >>PostCategory の category_id には _category.html.haml のどの要素の値を入れますか →db/fixtures/01_categoryにあるデータです。 seed-fuを導入し、質問にあるようにカテゴリーはデータベースに登録されています。 _category.html.hamlどの要素の値かについては、 value:"parent"にはpararents.categoriesの値を、childrenにはchildrenの値を入れたいです。 01_category.rbのparents =で定義されているのがvalue:parentで取得したいもの、〇〇_childで定義されているのが、childrenで取得したい値となります。
winterboum

2020/08/27 22:42

>>PostCategory の category_id には _category.html.haml のどの要素の値を入れますか この質問はDBのはなしではなく、viewのどの要素か、を聞いてます
susume

2020/08/27 23:00

>>この質問はDBのはなしではなく、viewのどの要素か、を聞いてます →%option{value: "parent"},%option{value: "children"}の要素を入れたいです

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます