渲染“新”页面为部分

时间:2014-09-12 16:19:44

标签: ruby-on-rails rest restful-architecture partials

我正在构建此应用,用户应该能够在同一页面中执行所有休息操作。所以在下面的表格下面:

<div class="row">
  <div class="col-lg-3">Name</div>
  <div class="col-lg-4">Lastname</div>
  <div class="col-lg-3">Schedule</div>
  <div class="col-lg-1"> </div>
  <div class="col-lg-1"> </div>
</div>
<div id="table-body-clients">
  <% @clients.each do |client| %>
    <%= render :partial => 'client', :locals => { :client => client } %>
  <% end %>
</div>

我应该添加一个表单来添加一个新客户端(相同的表单将加载和编辑所选的客户端。全部在远程)。

我能想到的最简单的方法就是呈现新的&#39;页面作为部分。但我似乎没有找到正确行动和/或正确加载当地人的方法。 这不起作用:

<%= render 'new', :controller => "clients", :action => "new", :locals => { :client => @client } %>
  • &#39;新&#39;实际上是部分名为&#39; _new&#39;

无论如何,我很感激对此代码的修复,以及对正确解决问题的正确方法的见解。 感谢

2 个答案:

答案 0 :(得分:0)

创建部分_form.html.erb,如下所示

<%= form_for client do |f| %>
your form fields here
<% end %>

然后,从new.html.erbedit.html.erb,或您需要表单的任何页面:

<%= render "form", client: @client %>

将@client替换为您需要表单的实际client对象。

答案 1 :(得分:0)

  

应该能够在同一页面中执行所有休息操作

不要担心在同一页面上执行操作 - 确保将您的视图保持在资源丰富的Rails样式中,但是在您想要的视图中调用它们(与部分页面相同)

如您所示,您可以这样做:

<%= render "clients/new", locals: { client: @client } %>

为了给您一个警告,您需要了解,因为您正在创建 new client,所以您需要在控制器中构建资源:

#app/controllers/clients_controller.rb
class ClientsController < ApplicationController
   def index
     @clients = Client.all
     @client = Client.new
   end
end

-

如你所说,你有一个nested route(IE client属于company),你想确保你有以下设置:

#config/routes.rb
resources :companies do
   resources :clients #-> domain.com/companies/:company_id/clients
end

#app/controllers/clients_controller.rb
class ClientsController < ApplicationController
   def index
      @clients = Client.all

      @company = Company.find params[:company_id]
      @client = Client.new
   end
end

#app/views/clients/index.html.erb
<%= render "new", locals: {company: @company, client: @client} %>

#app/views/clients/new.html.erb
<%= form_for [company, client] do |f| %>
   ...
<% end %>