我必须展示一些属于洞穴和洞穴属于用户的岩石!看起来很公平吗?但为什么岩石显示页面不能识别洞穴?我们走了:
摇滚模特
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
答案 0 :(得分:2)
在show
操作中,@cave.rocks
返回nil,因此您将nil分配给@rock
。顺便说一句,我猜它会返回一个集合而你不会有摇滚元素,你可能想要使用@cave.rocks.first
。
另外,在岩石控制器上进行一个显示动作是非常奇怪的,它可以获取洞穴ID并根据它找到岩石。更标准的方法是获得摇滚乐。
答案 1 :(得分:1)
在show动作中,在您的行中:
@rock = @cave.rocks
您正在为变量@rock分配(可能)ActiveRelation。 cave.rocks
将返回属于该洞穴的岩石集合。
你可以拨打@rock = @cave.rocks.first
,但视图中的常规练习是显示与洞穴相关的所有岩石,而不仅仅是第一个。