Я новичок в RoR, и у меня проблема с моим "приложением".
У меня есть таблица с именем "annonces" и таблица с именем "marques".(Это как "post" и "category" для приложения блога)
Я слежу за скринкастом # 228 Railscasts, но когда я хочу отсортировать столбец "Marque", он сортируется по ID ине по имени ...
Итак, вопрос в том, как мне сделать столбец сортируемой таблицы с несколькими таблицами?
Это больше "щелчок по заголовку для сортировки по этому атрибуту".
Например, если вы щелкнете по названию столбца (Marque), это должно отсортировать по алфавиту ASC и DESC: AUDI - BMW - VOLKSWAGEN / Повторный щелчок: VOLKSWAGEN - BMW - AUDI.
Но на данный момент Rails сортирует меня вот так (ID): 1 - 2 - 3 // 3 - 2 - 1. Вот как это выглядит: VOLKSWAGEN - AUDI - BMW // BMW - AUDI / VOLKSWAGEN.
Как я уже сказал, я слежу за этим скринкастом: http://railscasts.com/episodes/228-sortable-table-columns
Вы можете увидеть на этой странице несколько результатов.
Но в моем случае это с несколькими таблицами (Marque, Modele, Energie ...)
Скринкаст отлично работает, когда все в одной таблице.
Но я хочусделать это с содержимым из другой таблицы.
В моем annonce_controller:
helper_method :sort_column, :sort_direction
def index
@annonces = Annonce.order(sort_column + " " + sort_direction)
@modeles = Modele.all
@marques = Marque.order(sort_column + " " + sort_direction)
@energies = Energy.all
end
...
...
private
def sort_column
Annonce.column_names.include?(params[:sort]) ? params[:sort] :
"marque_id"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] :
"asc"
end
end
Для "индекса индекса" я попытался:
@annonces = Annonce.order(sort_column + " " + sort_direction)
@marques = Marque.all
и
@annonces = Annonce.find(params[:id])
@marques = Marque.order(sort_column + " " + sort_direction)
В моем marque_controller:
class MarquesController < ApplicationController
helper_method :sort_column, :sort_direction
def index
@marques = Marque.order(sort_column + " " + sort_direction)
end
...
...
private
def sort_column
Marque.column_names.include?(params[:sort]) ? params[:sort] :
"marque"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] :
"asc"
end
end
модель annonce.rb:
class Annonce < ActiveRecord::Base
attr_accessible :marque_id, :modele_id, :price, :type, :energy_id,
:power
belongs_to :marque
belongs_to :modele
belongs_to :energy
end
модель marque.rb:
class Marque < ActiveRecord::Base
attr_accessible :marque
has_many :modeles
has_many :annonces
end
Вид: annonce: index.html.erb
<table>
<tr>
<th><%= sortable "marque_id" %></th>
<th><%= sortable "modele_id" %></th>
<th><%= sortable "price" %></th>
<th><%= sortable "power" %></th>
<th><%= link_to "Energy", :sort => "energy_id" %></th>
<% for annonce in @annonces %>
<tr>
<td><%= annonce.marque.marque %></td>
<td><%= annonce.modele.try(:modele) %></td>
<td align="right"><%= annonce.price %> €</td>
<td align="right"><%= annonce.power %></td>
<td><%= annonce.energy.try(:energy) %></td>
</tr>
<% end %>
</table>
Вид маркировки выглядит следующим образом.
Мои таблицы выглядят так:
Объявления:
create_table :annonces do |t|
t.integer :marque_id
t.integer :modele_id
t.string :price
t.string :power
t.string :energy
Marque:
create_table :marques do |t|
t.string :marque
t.timestamps
Надеюсь, это поможет ...
Я бы создал все это, выполнив: rails g scaffold marque marque: string Или: rails g scaffoldannonce marque_id: целое число [...]
Спасибо!
++++