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