Форма фильтра в Rails? - PullRequest
       9

Форма фильтра в Rails?

1 голос
/ 28 августа 2009

Я новичок в Rails. Я просто помостил маленькую модель. Модель имеет поле под названием категория. Теперь я хочу отфильтровать записи на странице индекса по категориям.

<% form_for @domain do |f| %>
<p>
 Domain:
 <%= f.select(:Domain,%w{ LifeStyle Automobiles FoodAndBeverage Health IT Telecom EntertainmentAndCelebrity Education BankingInvestmentAndInsurance Travel Sports Parenting ConsumerElectronics RealtyAndLogistics CauseLed})%>


 <%= submit_tag "Filter" %>
</p>
<% end %>

<table border="1">
  <tr>
    <th>Domain</th>
    <th>Category</th>
    <th>Course detail</th>
    <th>Nameofblog</th>
    <th>Descriptionofblog</th>
    <th>Smename</th>
    <th>Smecommuntiy</th>
    <th>Smeifnotorkfac</th>
    <th>Noofmemb</th>
    <th>Discussionforumname</th>
    <th>Discussionforumdescription</th>
    <th>Qnasitesname</th>
    <th>Qnasitesnamedesc</th>
    <th>Newssitename</th>
    <th>Newssitedesc</th>
  </tr>

<% @media_universe_entries.each do |media_universe_entry| %>
  <tr>
    <td><%=h media_universe_entry.Domain %></td>
    <td><%=h media_universe_entry.Category %></td>
    <td><%=h media_universe_entry.CourseDetail %></td>
    <td><%=h media_universe_entry.NameOfBlog %></td>
    <td><%=h media_universe_entry.Descriptionofblog %></td>
    <td><%=h media_universe_entry.SMEname %></td>
    <td><%=h media_universe_entry.SMECommuntiy %></td>
    <td><%=h media_universe_entry.SMEIfnotOrkFac %></td>
    <td><%=h media_universe_entry.NoOfMemb %></td>
    <td><%=h media_universe_entry.discussionforumname %></td>
    <td><%=h media_universe_entry.discussionforumdescription %></td>
    <td><%=h media_universe_entry.QNASitesname %></td>
    <td><%=h media_universe_entry.QNASitesnameDesc %></td>
    <td><%=h media_universe_entry.NewsSiteName %></td>
    <td><%=h media_universe_entry.NewsSiteDesc %></td>
    <td><%= link_to 'Show', media_universe_entry %></td>
    <td><%= link_to 'Edit', edit_media_universe_entry_path(media_universe_entry) %></td>
    <td><%= link_to 'Destroy', media_universe_entry, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New media_universe_entry', new_media_universe_entry_path %>

Как видите, я пытаюсь создать доменную строку для файла. Как мне это сделать?

1 Ответ

5 голосов
/ 28 августа 2009

Вы также должны опубликовать метод контроллера, чтобы лучше понять модель.

В любом случае, предполагая, что модель Something имеет строковый столбец «категория», вам не следует жестко задавать значения для выбора, если только эти значения не являются фиксированными, в этом случае вы можете рассмотреть возможность использования строкового столбца.

Вот быстрый пример:

# something_controller.rb
  def index
    @categories = Something.find_by_sql("SELECT category FROM somethings GROUP BY category").map &:category
    @somethings = params[:category].blank? ? Something.all : Something.find_all_by_category(params[:category])
  end

это вид:

<% form_tag(:action => :index) do %>
  <%= select_tag "category", options_for_select(@categories) %>
  <%= submit_tag "Filter" %>
<% end %>

<table>
  <tr>
    <th>foo</th>
    ...
  </tr>
  <% somethings.each do |something| %>
    <tr>
      <td><%= something.foo %></td>
      ...
    </tr>
  <% end %>
</table>

Обновление:

Хотя приведенный выше код работает, он действительно слишком быстро закодирован и предполагает плохую практику.

Вот лучший способ:

# app/models/Something.rb
def self.all_categories
  find_by_sql("SELECT category FROM somethings GROUP BY category").map(&:category).select {|x| x}
end

def self.select(category)
  if category
    find_all_by_category(category)
  else
    find :all
  end
end

#app/controllers/something_controller.rb
def index
  @categories = Something.all_categories
  @somethings = Something.select(params[:category])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...