1

我想我遇到了渲染/重定向问题。在我的 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'

这只是指我表格中的第一行。

我在这里做错了什么?对不起,很长的问题,感谢您的帮助!

4

1 回答 1

3

您需要在更新操作中加载您的 @client 变量。这样想,如果你点击 else,编辑为视图提供了什么,因为你在渲染而不是重定向时只需要它。由于您的资源是嵌套的,因此 form_for 助手需要客户端和项目。

于 2012-11-29T01:24:54.987 回答