0

タイトルにあるように、特定のユーザーのすべての車を一覧表示しようとしています。また、各車には2つのオプションの表示と更新があります。ここに画像の説明を入力してください

写真にあるように、私の問題は、選択した車を表示または編集したいときに、ルーティング(画像の左下を見る)で、users / "id"/carsなどのすべての車のすべてのIDを取得することです。 / "id1" / "id2"は、代わりに特定の車のIDを取得します。users/ "id" / cars /"id1"/ここにteindex.html.erbファイルがあります。

<div class="container">
<h1>Listing Cars</h1>

<table class="table table-condensed">
  <tr>
    <th>Brand</th>
    <th>Color</th>
    <th>Model</th>
    <th>Year</th>
    <th></th>
    <th></th>
  </tr>

  <% @car.each do |car| %>
    <tr>
      <td><%= car.brand %></td>
      <td><%= car.color %></td>
      <td><%= car.model %></td>
      <td><%= car.year %></td>
      <td><%= link_to 'Show', user_car_path(@user,@car) %></td>
      <td><%= link_to 'Edit', edit_user_car_path(@user, @car) %></td>
    </tr>
    <% end %>
</table>
<br />
<%= link_to 'New car', new_user_car_path, :class => "btn btn-primary" %>
</div>

車のコントローラーが必要かどうか:

class CarsController < ApplicationController
def new
    @user = User.find(params[:user_id])
    @car = @user.cars.build
end

def create
    @user = User.find(params[:user_id])
    @car = @user.cars.build(params[:car])
      if @car.save
        redirect_to user_car_path(@user, @car), :flash => { :notice => "  car created!" }
      else
        redirect_to new_user_car_path ,:flash => { :notice => " sorry try again :(" }
      end
end

def show
  @user = User.find(params[:user_id])     
  @car = @user.cars.find(params[:id]) 
  #redirect_to user_car_path(@user, @car)  
end
def index
  @user = User.find(params[:user_id])     
  @car = @user.cars.all
end
def edit
  @user = User.find(params[:user_id])     
  @car = @user.cars.find(params[:id]) 
  #redirect_to user_car_path(@user, @car)  
end
def update
@user = User.find(params[:user_id])  
@car = @user.cars.find(params[:id])
if @car.update_attributes(params[:car])
  redirect_to user_cars_path, :flash => { :notice => "  Car Updated!" }
else
  render 'edit'
end
end
end
4

1 に答える 1

2

Ruby列挙子の内部では、ブロック変数は列挙子の各メンバーです。したがって、サンプルコードで、@cars["Toyota", "Mazda", "Honda"]、の場合、car最初"Toyota"に、次に"Mazda"、次になり"Honda"ます。

これは、ブロック変数を使用する必要があるときにインスタンス変数を使用していることを示す長い方法です。;)コードを次のように修正します。

  <% @car.each do |car| %>
    <tr>
      <td><%= car.brand %></td>
      <td><%= car.color %></td>
      <td><%= car.model %></td>
      <td><%= car.year %></td>
      <td><%= link_to 'Show', user_car_path(@user, car) %></td>
      <td><%= link_to 'Edit', edit_user_car_path(@user, car) %></td>
    </tr>
    <% end %>

それはあなたのルートでcarはなく、あるべきです。@car

于 2012-07-26T15:13:54.277 に答える