あなたの質問に対する適切な答えはありません。アプリケーションのレイアウトに大きく依存します。さらに、ここには to_param と AJAX の使用に関する有効な回答があり、重要な詳細が追加されています。しかし、あなたに有利なスタートを切るために。
ビュー/foos については、index.html.erb を次のように書き換えます。
<%= render partial: "show_foos", locals: { foos: @foos, selected_foo: nil }%>
そしてあなたのshow.html.erbとして:
<%= render partial: "show_foos", locals: { foos: @foos, selected_foo: @foo }%>
show メソッドの foos_controller.rb では、@foos と @foo の両方を取得する必要があります。例:
@foos = Foo.all
@foo = Foo.find(params[:id])
さて、楽しい部分に。views/foos ディレクトリに戻ります。「_show_foos.erb」というパーシャルを作成します (#index と #show の両方から呼び出したもの)。次のようにします。
<table>
<tr>
<td>
<%= render partial: "show_foos_list", locals: { foos: foos, selected_foo: selected_foo }%>
</td>
<td>
<%= render partial: "show_foo_props", locals: { selected_foo: selected_foo }%>
</td>
</tr>
</table>
これは、2 つの列を持つテーブルを作成する非常に粗野で醜い例であることに注意してください。実際には、div とスタイリングを使用します。また、レイアウトをそれが属する場所 (適切なレイアウト ファイル) にプッシュし、そこで名前付き yield を使用することを検討してください。しかし、私が言ったように、有利なスタート - シンプルなテーブル。
ここで、ここで説明した 2 つのパーシャルを定義するだけです。まず、左側の foos をリストする「_show_foos_list.erb」。各 foo に「title」属性があると仮定すると、次のようになります。
<% foos.each do |foo| %>
<%= link_to_unless selected_foo && (foo.id == selected_foo.id), foo.title, foo %><br />
<% end %>
次に、右側の foo と foo_bars - "_show_foo_props.erb":
<% if selected_foo %>
# Here display the Foo attributes
<h2> Foo: <%= selected_foo.title %> </h2>
<% selected_foo.foo_bars.each do |foo_bar| %>
# Here display each FooBar that belongs to Foo
<h3>FooBar <%= foo_bar.title %></h3>
<%= foo_bar.description %>
<% end %>
<% end %>
繰り返しますが、非常に大雑把な例です。「タイトル」、「説明」を適切なパラメーター セットに置き換え、パーシャルを使用して FooBars を表示します。CSSでスタイリングを行います。などなど... 必要に応じてリファクタリングします。
ルートの話。「www.yourapp.com/foos」URL に移動すると、左側にすべての foos のリストが表示され、右側には何も表示されません。左の列の任意の foo を押すと、「www.yourapp.com/foos/:id」に移動します。ここで、:id は選択した foo の ID です (ここでの他の回答の to_param またはより高度な手法を検討してください)この部分を意味のあるものにするため)、左側に foo のリストを取得し、右側に選択した foo とそれに属するすべての foo_bars のプロパティを取得します。
ここに示した大まかなアイデアに基づいて、独自の実装のレイアウトを開始するのに役立つことを願っています.