Link_to 助手:嵌套路由

Link_to helper: Nested Routes

这让我发疯...

我已经构建了一些带有标准路由的测试应用程序,但这次我想将 b 嵌套在 a 中。所以像这样(a和b是方便的例子)

resources :a do
 resources :b
end

在 'b controller' 中我将索引定义为

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 'undefined method for 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>

所以解释一下,据我了解。嵌套后的三个重要文件是 routes.rb,您需要在其中为索引设置正确的路径...对于此示例,它将是

get '/a/:a_id/b', to: 'b#index'

这来自 运行 rails 路由并看到那里返回了正确的路径。

然后在 'b controller' 中将变量声明为正常

def index
    @b = B.all
end

然后在view/b/index.html.erb你调用变量,但关键是指新的b#index路径

<% @b.each do |b| %>
  <li>
  <%= link_to @b.name, a_b_url %>
  </li>
<% end %>

我敢肯定我的理解还没有达到应有的程度,但我已经让它向前和向上发展了。快乐的日子