Rails 3.2.3中的嵌套路由

时间:2012-06-19 15:22:29

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在尝试为具有许多电路板的项目创建嵌套路由。

首先,我创建了一个新董事会的链接:

<%= link_to 'New Board', new_project_board_path(@project) %>

在routes.rb中,我只是嵌套了其余的路径:

resources :projects do
  resources :boards
end

在电路板控制器中,我按照以下方式调整了新的和创建操作:

    def new
        @project = Project.find(params[:project_id])
        @board = @project.boards.new

        respond_to do |format|
          format.html # new.html.erb
          format.json { render json: @board }
        end
  end



 def create
    @project = Project.find(params[:project_id])
    @board = @project.boards.new(params[:board])

    respond_to do |format|
      if @board.save
        format.html { redirect_to @board, notice: 'Board was successfully created.' }
        format.json { render json: @board, status: :created, location: @board }
      else
        format.html { render action: "new" }
        format.json { render json: @board.errors, status: :unprocessable_entity }
      end
    end
  end

至少我还将_form.html.erb更改为:

<%= form_for([@project, @board]) do |f| %>

等。

当我点击按钮创建板(因此执行新操作)时,我的问题就出现了,它说没有路由匹配。我想这与创建动作有关,因为它不再获得项目的ID?我真的不知道还有什么要改变的地方。

1 个答案:

答案 0 :(得分:1)

似乎你的错误就在这里

format.html { redirect_to @board, notice: 'Board was successfully created.' }

你没有非嵌套:电路板资源,对吗?尝试将此行更改为

format.html { redirect_to [@project, @board], notice: 'Board was successfully created.' }