如何在我的节目页面上显示索引和表单?

时间:2014-08-13 13:41:28

标签: ruby-on-rails

如何让我的用户(用户模型)显示页面显示他们提供的服务(另一个模型)的列表,以及人们可以为其服务预订约会(另一个模型)的表单? / p>

看起来我需要在控制器中使@services变量更灵活。但我不知道怎么做。似乎我渲染的只有一个部分能够在我的控制器中使用它。怪异!

USERS CONTROLLER

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
    @appointment = Appointment.new
    @services = @user.services.collect {|service| [ service.id, service.title, service.description, service.length, service.user_id] }
  end

end

USERS / SHOW.HTML.ERB: 服务列表部分:&lt;%render&#39; shared / services_list&#39; %GT;

<table>
  <thead>
    <tr>
      <th>Start time</th>
      <th>End time</th>
      <th>Note</th>
      <th>Service</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @appointments.each do |appointment| %>
      <tr>
        <td><%= appointment.start_time %></td>
        <td><%= appointment.end_time %></td>
        <td><%= appointment.note %></td>
        <td><%= appointment.service.title %></td>
        <td><%= link_to 'Show', appointment %></td>
        <td><%= link_to 'Edit', edit_appointment_path(appointment) %></td>
        <td><%= link_to 'Destroy', appointment, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

USERS / SHOW.HTML.ERB: AppOINTMENTS FORM PARTIAL:&lt;%= render&#39;约会/表格&#39; %GT;

<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Description</th>
      <th>Length</th>
      <th>User</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @services.each do |service| %>
      <tr>
        <td><%= service.title %></td>
        <td><%= service.description %></td>
        <td><%= service.length %></td>
        <td><%= service.user.email %></td>
        <td><%= link_to 'Show', service %></td>
        <td><%= link_to 'Edit', edit_service_path(service) %></td>
        <td><%= link_to 'Destroy', service, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

错误: 用户#show中的NoMethodError 未定义的方法`title&#39; for [1,&#34; exmaple title&#34;,&#34; example description&#34;,90,1]:Array

第15行突出显示 - &gt; &lt;%= service.title%&gt;

<tbody>
       <% @services.each do |service| %>
         <tr>
           <td><%= service.title %></td>
           <td><%= service.description %></td>
           <td><%= service.length %></td>
           <td><%= service.user.email %></td>

谢谢!

1 个答案:

答案 0 :(得分:1)

好。 @peshkira是对的。我需要调用该对象。

所以我将这一行添加到我的控制器@services_list = @user.services.collect中,这样我就可以按照&#39;索引的风格创建一个列表。

我的完整控制器看起来像这样。

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
    @appointment = Appointment.new
    @services = @user.services.collect {|service| [ service.title, service.id] }
    @services_list = @user.services.collect
  end

end

这将为嵌套表单(服务和该服务的约会)提供功能,并提取服务列表的数据。