Techioz Blog

Rails には、nil:NilClass の未定義の get selected value メソッドが 1 つあります。

概要

アソシエーションを通じて選択された値を取得したい 関連付けはアイテムとカテゴリです と

class Item < ApplicationRecord
 has_one :categoryship
  has_one :category, through: :categoryship, dependent: :destroy
  accepts_nested_attributes_for :category

end

アイテム編集時

<%= f.select :category_id, 
    options_for_select(
        Category.all.map{|rel| [rel.name, rel.id]},
        @item.category_id )
      %>

まだ機能しません。アイテム編集を試して、カテゴリIDでカテゴリシップを取得しましたが、選択したカテゴリをまだ取得できません。誰かがこれについてヒントをくれるでしょうか?

  def edit

    @categoryship = @item.categoryship
    @category = @categoryship.where(category_id: category_id)
 
  end

解決策

したがって、ビューには @item.category_id がありますが、モデルに基づくと、fkey はアイテムではなくカテゴリシップにあります。

次に、コントローラー コードで、より近いように見えます。最初に @categoryship = @item.categoryship を取得します。これは良いことです。ビュー内で @categoryship.category_id を使用できるためです。

ただし、@category = @categoryship.where(category_id: category_id) は失われます。カテゴリシップにはbelongs_to :categoryがあると仮定しているので、ここのコントローラーでは @category = @categoryship.category とする必要があります。

それが役立つことを願っています。または、あなたが何をしようとしているのかを理解するために、ここにさらにコードを追加する必要があることがわかります。