我要展示一些属于洞穴的岩石和属于使用者的洞穴看起来很公平对吧但是为什么岩石显示佩奇·希尔尔不认识这个洞穴呢?我们开始吧:
岩石模型

belongs_to :cave

洞穴模型
has_many :rocks

用户模型
has_one :cave

岩石控制器
def new
    @rock = Rock.new
  end

    def show
     @cave = Cave.find(params[:cave_id])
       @rock = @cave.rocks
    end

  def create
    @rock = current_user.cave.rocks.build(params[:rock])
    if @rock.save
      flash.now[:success] = "Ya Man"
      redirect_to :action => :show
    else
      render :new
  end
end

摇滚秀
<h2><%= @rock.cave.name %></h2>

错误
undefined method `cave' for nil:NilClass

最佳答案

show操作中,@cave.rocks返回nil,因此将nil指定给@rock顺便说一句,我猜它返回一个集合,而您在那里没有rock元素,您可能需要使用@cave.rocks.first来代替。
另外,在岩石上有一个show action控制器,它获取洞穴id并根据它找到岩石,这是相当奇怪的。更标准的方法是接收岩石id。

09-25 19:23