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 %>
我敢肯定我的理解还没有达到应有的程度,但我已经让它向前和向上发展了。快乐的日子
这让我发疯...
我已经构建了一些带有标准路由的测试应用程序,但这次我想将 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 %>
我敢肯定我的理解还没有达到应有的程度,但我已经让它向前和向上发展了。快乐的日子