ドグサレ初心者のへっぽこビッグウェーブ

地球の底辺にいるゴミがプログラミングとか音楽とかを語るクソブログ

アソシエーションからの外部キーの更新とか

なんかよくわからないけど動いた。

理由が判明。
子であるMusicsのcreateアクションのリダイレクト先にあり。

  def create
    @artist = Artist.find(params[:artist_id])  #Artistのインスタンス変数
    @music = Music.new(music_params)  # music_params =

    respond_to do |format|
      if @music.save
        format.html { redirect_to @music, notice: 'Music was successfully created.' }
        format.json { render :show, status: :created, location: @music }
      else
        format.html { render :new }
        format.json { render json: @music.errors, status: :unprocessable_entity }
      end
    end
  end

のリダイレクト先が@musicだと「music_urlってなんだよくわかんねーぞゴルァ」言われる。
とりあえず

format.html { redirect_to @artist, notice: 'Music was successfully created.' }

とすると、遷移先が @artist(= artists/:artist_id)になるので、とりあえずエラーは避けられる。

とは言えこのままだとイミフな遷移先でいけてなさすぎるので改善の必要ありそう。



とりあえずmusicテーブルにレコードを追加できるようになったものの、
親であるArtistsの外部キーが紐付かない。
外部キーの更新もやらないといけないのだが、いかんせんやりかたがイマイチ不明。


と、ちまちまやっていると、ヒントをみっける。
Activeレコードの関連付け | Rails日本語ドキュメント | Ruby STUDIO

※モデル間のアソシエーションはできていること前提
これまで、createアクションでのMusicモデルを作成するインスタンス変数は

@music = Music.new(music_params)

と記載していたが、親であるArtistsモデルを関連付けてMusicモデルを作成するには

@music = @artist.musics.new(music_params)

と記述する必要がある。

やってみたところ、きちんとartist_idに値が格納されました。
やったー


次やること
  • musicsの削除機能
    • 現状一覧ページのshow/edit/deleteリンクはよくわからないので全部切ってる。これを復活させる。
  • musicsクラス、createアクションのリダイレクト先が@artistになってるのでなんとかする
    • music一覧に戻したい
  • musicsのソート機能
    • 現状どのartistだろうがmusic一覧が全ぶっぱしているので、これを必要なものだけマスクした形でみせる。