我正在尝试为具有许多电路板的项目创建嵌套路由。
首先,我创建了一个新董事会的链接:
<%= 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?我真的不知道还有什么要改变的地方。
答案 0 :(得分:1)
似乎你的错误就在这里
format.html { redirect_to @board, notice: 'Board was successfully created.' }
你没有非嵌套:电路板资源,对吗?尝试将此行更改为
format.html { redirect_to [@project, @board], notice: 'Board was successfully created.' }