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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

解決済

ネストしたresourceを利用しビューでform_forを使うのにエラー発生(アソシエーションが違う?)

hiroshimaeasyry
hiroshimaeasyry

総合スコア0

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1回答

0評価

1クリップ

4閲覧

投稿2019/01/04 07:21

Ruby on Rails Tutorialに追加機能を装備したいです

具体的には、ユーザーのmicropostに対しての返信機能。
これを実装している途中なのですが、アソシエーションについての理解と
form_forの使い方への理解が甘く、うまく動かすことができていないため、
助けをお借りしたいです。。
実装の中で書いたコードを記載します。

Repliesモデルを作成

こういう構造を想定しています

/app/models/user.rb

ruby

class User < ApplicationRecord has_many :microposts, dependent: :destroy has_many :replies, through: :micropost_replies, source: :microposts, dependent: :destroy has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :passive_relationships, class_name: "Relationship", foreign_key: "followed_id", dependent: :destroy has_many :following, through: :active_relationships, source: :followed has_many :followers, through: :passive_relationships, source: :follower .... end

※2行目has_many: through:が怪しげ...

/app/model/micropost.rb

ruby

class Micropost < ApplicationRecord belongs_to :user has_many :replies, dependent: :destroy default_scope -> { order(created_at: :desc) } mount_uploader :picture, PictureUploader validates :user_id, presence: true validates :content, presence: true, length: {maximum: 140} validate :picture_size .... end

/app/model/reply.rb

ruby

class Reply < ApplicationRecord belongs_to :microposts belongs_to :users validates_presence_of :tweet_id, :reply end

ルーティングはネストしている

ruby

Rails.application.routes.draw do get 'password_resets/new' get 'password_resets/edit' root 'static_pages#home' get '/help', to: 'static_pages#help' get '/about', to: 'static_pages#about' get '/contact', to: 'static_pages#contact' get '/signup', to: 'users#new' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users do member do get :following, :followers end end resources :account_activations, only: [:edit] resources :password_resets, only: [:new, :create, :edit, :update] resources :microposts, only: [:show, :create, :destroy] resources :microposts do collection do get :search end end resources :microposts do resources :replies end resources :relationships, only: [:create, :destroy] end

ルーティング

replyコントローラーでとりあえずはreplyをnewしたい

ruby

class RepliesController < ApplicationController before_action :logged_in_user def new @micropost = Micropost.find(params[:micropost_id]) @reply = Reply.new end def create @reply = Reply.create(create_params) redirect_to micropost_reply_path end private def create_params params.require(:reply).permit(:response).merge(micropost_id: params[:micropost_id], user_id: current_user.id) end end

※今回は一旦関係なさそうだけどストロングパラメーターの設置の仕方も違いそう

エラーが発生しているのはビュー

ruby

.... <h2>コメントを残す</h2> <%= form_for[@micropost, @reply] do |f| %> <%= f.text_area :response, placeholder: "返信する", class: 'form-control' %> <%= f.submit "リプライ", class:"btn btn-primary" %> <% end %> ....

form_forにreplyのresponseカラムの内容を入力して、
表示させたいのですが、エラー発生

考えられるエラーの原因

・form_forの使い方が誤っている(f.text_area 以降)
・アソシエーションができていない
・アソシエーションはできているけど理解できていないため使えていない

お分かりになりましたらご教示いただけませんでしょうか?
よろしくお願いいたします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。