0

私は、MVCの概念をRubyで最良の方法で実装する方法について理論的な質問をしました(ASP、PHPなどのヒント言語の非MVC -thxに精通しているため)。

私のサンプルアプリでは、とその部品を管理する必要があります。これに続いて、私は(私の意見では)次の2つのコントローラーを実装します :-CarsController
- PartsController

どちらにもデフォルトのアクション(インデックス、表示、編集、削除)があります。

PartsControllerの「インデックス」アクションでは、車のすべてのリンクされたパーツが表示されます。

CarsControllerの「インデックス」アクションには、すべての車の詳細が表示されます。さらに、車のID(またはセッション中の車)を渡すPartsControllerの「インデックス」アクションのコンテンツを含めます。

レイアウト例(CarsController / show / 1)
-車:Porsche GT-
ブランド: Porsche-
モデル:GT
-PS:400-
パーツ(PartsController / indexから取得、車のパーツは以前にCarsControllerによってキャッシュされていました):
---ドアロック
- -エンジン400

使ってみました

render "cars/index"  
render :action => "cars/index"  
render :template => "cars/index"  
render :controller => "cars", :action => "index"

index.html.erbテンプレートにありますが、どれも機能しません(「テンプレートがありません」というエラーメッセージが表示されるたびに)。

私はすでにこれに多くの問題を抱えていたので、私のコンセプト/実装は間違っているかもしれないと思います。

より良い方法を見つけるためのこれに関する提案はありますか?

ご協力ありがとうございました !

アップデート:

これがより具体的な例です。ユーザーがlocalhost/cars/1にアクセスするとします。これを行うためのコントローラーのテンプレートは次のとおりです。

app / view / cars / show.html.erb

<%= form_for(@car) do |f| %>
  <div class="field">
    <%= f.label :brand %><br />
    <%= f.text_field :brand %>
  </div>
  <div class="field">
    <%= f.label :model %><br />
    <%= f.text_field :model %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
<%= render "parts/index" %>

app / view / components / index.html.erb

<table>
  <% @parts.each do |part| %>
  <tr id="part-<%= part.id %>">
    <td><%= part.amount %></td>
    <td><%= part.price_total %></td>
  </tr>
  <% end %>
</table>

パーツはキャッシュからロードされるため、PartsControllerに車IDは必要ありません(まだ)!

ルート.rb

resources :cars do
  resources :parts
end

次に、次のエラーが発生します。

{:locale => [:en]、:formats => [:html]、:handlers => [:erb、:builder、:coffee]}の部分的なパーツ/インデックスがありません。検索対象:* "D:/ Dev / Ruby / MyCRM / app / views" * "C:/Ruby193/lib/ruby/gems/1.9.1/gems/datagrid-0.5.3/app/views"

4

2 に答える 2

0

あなたは実際に今、多くの異なる問題を抱えています。あなたの投稿からの良い点は、あなたがリストしたようにあなたが2人のコントローラーを持っているべきであるということです。ルーティング(これがrailsがWebリクエストを処理する方法です)は、初心者の場合は非常に複雑なトピックですが、非常に重要です。

このドキュメントから始めて、それでも質問がある場合は、もう一度質問することをお勧めします。

于 2012-04-10T23:55:03.820 に答える
0

Railsでは「パーシャルのレンダリング」と呼ばれているようなものです。

基本的な考え方は、htmlのスタブピース(この場合、特定の車のパーツのリストをレンダリングするためのパーツテンプレート)があり、そのピースが1つ以上のフルページに含まれることです。

render "parts/index"

ページ全体ではなく、partsフォルダの下にある「index」という名前の部分を探しているため、は機能していません。慣例により、Railsのパーシャルは先頭にアンダースコアを付けて名前が付けられます。

これを機能させるには、パーシャル、つまりapp / views / components/_list.html.erbを作成する必要があります

2番目の部分は、その部分がパーツリストにアクセスできる必要があるということです。車のコントローラーが@parts変数を作成しない限り、これを推測する必要があります。これが実際に行われる方法は、ローカル変数を渡すことです。したがって、_list.html.erbを「@parts」の代わりに「parts」を使用するように書き直してから、車のコントローラーで次のようにレンダリングします。

render "parts/list", :locals => {:parts => @car.parts}

パーツのインデックスで、すべてのパーツを一覧表示する場合は、次のようにパーシャルをレンダリングします。

render "list", :locals => {:parts => @parts}

詳細およびより詳細なウォークスルーについては、http: //guides.rubyonrails.org/layouts_and_rendering.html#using-partialsを参照してください。

于 2012-04-11T16:47:08.907 に答える