2

ここに画像の説明を入力答えを見つける方法について、ベテランのアドバイスをお願いします。私は自分の見解に論理が多すぎることを知っています。繰り返しますが、私はまだ「実行して学ぶ」ことを試みています。もちろんそこからリファクタリングします。

作成されたロジスティクスを反復処理したいのですが、("X"、"Y"、または "Z" のいずれかの形式で渡された) ロジスティクス_タイトルが "X" と一致する場合は、X を div に表示し、それ以外の場合は何も表示しません。

<div class="container-fluid">
<div class="row-fluid">
<div class="span4 hero-unit">
   <% @logistics.each do |logistic| %>
      <% if logistic.logistic_title = "Practice" %><br>
       <%= logistic.logistic_title %>
       <%= logistic.user.full_name %>
       <%= logistic.content %><br>
       <%= link_to time_ago_in_words(logistic.created_at) + " ago", logistic %> |
       <%= link_to "Edit", edit_logistic_path(logistic) %> |
       <%= link_to "Remove", logistic, method: :delete, data: { confirm: "Remove? This action cannot be undone."} %> 
     <% else %>
      <%= puts "" %>  
     <% end %> 
   <% end %>
</div>
<div class="span4 hero-unit">
  <% @logistics.each do |logistic| %>
     <% if logistic.logistic_title = "Game" %><br>
      <%= logistic.logistic_title %>
      <%= logistic.user.full_name %>
      <%= logistic.content %><br>
      <%= link_to time_ago_in_words(logistic.created_at) + " ago", logistic %> |
      <%= link_to "Edit", edit_logistic_path(logistic) %> |
      <%= link_to "Remove", logistic, method: :delete, data: { confirm: "Remove? This action cannot be undone."} %> 
    <% else %>
     <%= puts "" %>  
    <% end %> 
  <% end %>
</div>
<div class="span4 hero-unit">
  <% @logistics.each do |logistic| %>
     <% if logistic.logistic_title = "Etc." %><br>
      <%= logistic.logistic_title %>
      <%= logistic.user.full_name %>
      <%= logistic.content %><br>
      <%= link_to time_ago_in_words(logistic.created_at) + " ago", logistic %> |
      <%= link_to "Edit", edit_logistic_path(logistic) %> |
      <%= link_to "Remove", logistic, method: :delete, data: { confirm: "Remove? This action cannot be undone."} %> 
    <% else %>
     <%= puts "" %>  
    <% end %> 
  <% end %>
</div>

私はいくつかのヘルパーを書く必要があることを知っていますが、正しい方向へのポイントが役立ちます. 優しくしてください、これが私が学ぶ方法です。

ご覧いただきありがとうございます。

4

1 に答える 1

3

ビューに重複したコードとロジックがたくさんあるという点で、あなたは正しいです。これを自分で行う場合は、コントローラーを変更して、タイトルに基づいて @logical インスタンス変数が 3 つのインスタンス変数に分割されるようにします。

@practice = @game = @etc = []
@logistics.each do |logistic|
  if logistic.title == 'Practice'
    @practice << logistic
  elsif logistic.title == 'Game'
    @game << logistic
  elsif logistic.title == 'Etc.'
    @etc << logistic
  end
end

ヘルパーに関しては、標準の Rails アプリを作成していて、コントローラー名がモデルと一致する場合、通常、ヘルパー用に link_to および logistic_edit_path ヘルパーが作成されると思います。したがって、それらを自分で追加する必要はありません。

等価演算子を意味する場合は、単一の等号 (=) を使用しないように注意してください。あなたのコードはおそらく次のようになるはずです:

<div class="container-fluid">
<div class="row-fluid">
<div class="span4 hero-unit">
   <% @logistics.each do |logistic| %>
      <% if logistic.logistic_title == "Practice" %>
       <br>
       <%= logistic.logistic_title %>
       <%= logistic.user.full_name %>
       <%= logistic.content %><br>
       <%= link_to time_ago_in_words(logistic.created_at) + " ago", logistic %> |
       <%= link_to "Edit", edit_logistic_path(logistic) %> |
       <%= link_to "Remove", logistic, method: :delete, data: { confirm: "Remove? This action cannot be undone."} %> 
     <% else %>
      <%= puts "" %>  
     <% end %> 
   <% end %>
</div>
<div class="span4 hero-unit">
  <% @logistics.each do |logistic| %>
     <% if logistic.logistic_title == "Game" %><br>
      <%= logistic.logistic_title %>
      <%= logistic.user.full_name %>
      <%= logistic.content %><br>
      <%= link_to time_ago_in_words(logistic.created_at) + " ago", logistic %> |
      <%= link_to "Edit", edit_logistic_path(logistic) %> |
      <%= link_to "Remove", logistic, method: :delete, data: { confirm: "Remove? This action cannot be undone."} %> 
    <% else %>
     <%= puts "" %>  
    <% end %> 
  <% end %>
</div>
<div class="span4 hero-unit">
  <% @logistics.each do |logistic| %>
     <% if logistic.logistic_title == "Etc." %><br>
      <%= logistic.logistic_title %>
      <%= logistic.user.full_name %>
      <%= logistic.content %><br>
      <%= link_to time_ago_in_words(logistic.created_at) + " ago", logistic %> |
      <%= link_to "Edit", edit_logistic_path(logistic) %> |
      <%= link_to "Remove", logistic, method: :delete, data: { confirm: "Remove? This action cannot be undone."} %> 
    <% else %>
     <%= puts "" %>  
    <% end %> 
  <% end %>
</div>
于 2012-10-02T04:32:25.287 に答える