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