尝试使用单独的控制器时,Ruby on rails“无路由匹配”

时间:2012-06-11 19:47:50

标签: ruby-on-rails ruby-on-rails-3 networking network-programming ruby-on-rails-3.2

所以我目前正在尝试使用RoR实现来映射我的建筑物的网络。我有一个很好的平面图,我也为它创建了开关对象。最终,交换机将有许多插孔,每个插孔将与房间号码一对一地映射。

目前一切都在地板和开关之间完美运行,直到我尝试单独显示开关。我试图通过在单独的控制器中使用show方法来做到这一点。最初地板控制器负责,但现在我想要开关控制器。

这是我的部分切换代码(apps / views / switch / _switch.html.erb):

<p>
  <%= switch.title %>

  <%= link_to 'show', :controller => "switches", :action => 'show'  %>

  <%= link_to 'Destroy', [switch.floor, switch],
               :confirm => 'Are you sure?',
               :method => :delete %>
</p>

这是我的show方法(apps / controllers / switches_controller.rb):

...
  def show
    @floor = Floor.find(params[:floor_id])
    @switch = @floor.switches.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render :json => @switch }
    end
  end
...

当我没有在部分标记交换机控制器时,每当我点击显示该链接充当返回同一页面的链接...基本上只是刷新。当我标记开关控制器时,我得到'No route matches [GET]“/ assets”'错误。

我尝试过MULTIPLE不同的语法,但没有任何工作。如果有人能帮助我,我会非常感激!!

如果有必要发布更多我的代码,请告诉我。

2 个答案:

答案 0 :(得分:1)

您可以运行'rake routes '命令列出所有可用的路由选项,并建议您使用url / path,而不是为各个链接指定控制器和操作。

我假设您已经为楼层和交换机设置了嵌套路由,然后获取此URL,即

/floors/:floor_id/switches/:id/show

你可以使用

<%= link_to "Switch", floor_switch_path(switch.floor, switch) %>

答案 1 :(得分:0)

&#39;显示&#39;用于显示特定元素的方法。在你的情况下特别切换。所以你需要发送:id给你的控制器,比如这个

link_to "Switch", :controller => "switches", :action => "show", :id => switch