我想我遇到了渲染/重定向问题。在我的 Rails 应用程序中,我的客户可以拥有许多项目。当我更新一个项目时,我使用带有 form_for 方法的嵌套表单,分别向它传递一个客户端和项目实例变量。
这是我的代码:
路线.rb:
resources :clients do
resources :projects
end
项目控制器.rb
def edit
@client = Client.find(params[:client_id])
@project = Project.find(params[:id])
end
def update
@project = Project.find(params[:id])
respond_to do |format|
if @project.update_attributes(params[:project])
format.html { redirect_to client_project_path(@project.client, @project), notice: 'Project was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" } # !!this seems to be the problem
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
意见/项目/_form.html.erb:
<%= simple_form_for([@client, @project]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :title %>
<%= f.input :start_on %>
<%= f.input :end_on %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
当我简单地显示编辑操作时,一切正常。如果我用有效数据更新项目,一切都很好,也是。当我在表单中输入无效或丢失的数据时会出现问题 - 然后调用更新方法的“其他部分”,并且应该呈现“编辑”操作。
这确实发生了,但在我看来,“编辑”方法或我的表单有问题,因为当我更改render action: "edit"
为时redirect_to action: "edit"
,它确实重定向了我(当然没有错误消息,所以它显然不是所需的解决方案,但是我只是想测试)。
呈现“编辑”时,这是我收到的错误消息:
undefined method `project_path'
这只是指我表格中的第一行。
我在这里做错了什么?对不起,很长的问题,感谢您的帮助!