ruby rails有一个通过get selected value undefined方法为nil:NilClass

z9ju0rcb  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(103)

我想从一个有一个通过关联的关联是项目和类别的选定值

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的categoryship,但仍然没有得到选定的类别。有人能给点提示吗

def edit

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

rqenqsqc

rqenqsqc1#

所以,在你看来,你有@item.category_id,但根据你的模型,fkey应该在categoryships中,而不是在items中。
然后在你的控制器代码中,你似乎更接近了,首先你抓住了@categoryship = @item.categoryship,这很好,因为现在在你的视图中你可以使用@categoryship.category_id
@category = @categoryship.where(category_id: category_id)丢失。我假设在Categoryship中你有一个belongs_to :category,所以在你的控制器中你应该只有@category = @categoryship.category
希望这能有所帮助,或者您可以看到您确实需要在这里添加更多代码,以便我们可以理解您正在尝试做什么。

ljsrvy3e

ljsrvy3e2#

1.选择一个测试框架并使用它。
1.学会爱调试器。
最后:以下任何一个都应该起作用:

def edit
    @categoryship = @item.categoryship
    @category = @categoryship.category
    # OR
    @category = @item.category
  end

字符串
如果他们没有,那么你的关系或数据库中就有问题了。没有更多信息很难判断是哪一个。
您要做的是在edit方法中的某处设置一个断点(调试器),然后查看数据库。
@item是否为nil?这就是你的问题@item.categoryship是否为nil?如果是这样,那就是你的问题了。是因为数据库中没有还是因为连接错误?等等

相关问题