这让我发疯...
我已经构建了一些具有标准路由的测试应用程序,但是这次想在a内嵌套B。这样(A和B是轻松的例子)
resources :a do
resources :b
end
在" B控制器"中,我的索引定义为
def index
@b = B.all
end
在索引页上我有
<p>B index</p>
<ul class="b">
<% @b.each do |b| %>
<li>
<%= link_to b.name, b %>
</li>
<% end %>
控制器参数设置
def B_params
params.require(:b).permit(:name, :description, :this, :that, :a_id)
end
因此,错误消息是在查看index.html'未定义的b_path方法'
我很确定这是一个路由问题,因为我所有其他索引页面都可以正常工作。那么路由嵌套B_Path的正确方法是什么。
我尝试了
get '/a/:id/b', to: 'b#index' -----fails
get '/a/:a_id/b', to: 'b#index' ----fails
get '/b', to: 'b#index' ----- not surprising fails
所以我想念什么。一旦您嵌套资源
,还有其他事情要做还是其他方式来链接谢谢
好的,所以我设法在感觉像永恒之后弄清楚了。以防万一任何人有兴趣
link_to b.name语句后立即引用" b"的故障。应该是...
<p>B index</p>
<ul class="b">
<% @b.each do |b| %>
<li>
<%= link_to b.name, a_b %>
</li>
,请众所周知,请解释一下。一旦嵌套的三个重要文件是路由。RB您需要在其中设置索引的正确路由...对于此示例,它将为
get '/a/:a_id/b', to: 'b#index'
这来自运行导轨路线,看到正确的路径返回那里。
然后在" B控制器"中,您将变量声明为正常
def index
@b = B.all
end
然后在视图/b/index.html.erb中您调用该变量,但至关重要的是参考新的B#索引路径
<% @b.each do |b| %>
<li>
<%= link_to @b.name, a_b_url %>
</li>
<% end %>
我敢肯定,我的理解还没有完整,但是我已经开始工作了。快乐的日子