我是一名RoR初学者,我对我的" app"有疑问。
我有一张名为" annonces"和一个名为"的表marques"。 (它就像"帖子"和"类别",对于博客应用程序)
我正在关注有轨电视播报的#228屏幕截图,但是当我想要排序时 " Marque"列,按ID排序,而不是按名称排序......
所以问题是,如何使用多个表进行可排序的表列 表
它更多"点击标题按该属性进行排序"。
例如,如果您单击列的名称(Marque),则应该这样做 按字母顺序排列的ASC和DESC:奥迪 - 宝马 - 大众/重新点击: VOLKSWAGEN - 宝马 - 奥迪。
但就目前而言,Rails将我这样排序(ID):1 - 2 - 3 // 3 - 2 - 1.这就是: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
对于" def index"我试过了:
@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>
品牌的观点看起来像这样。
我的表看起来像这样:
Annonces:
create_table :annonces do |t|
t.integer :marque_id
t.integer :modele_id
t.string :price
t.string :power
t.string :energy
商品型号:
create_table :marques do |t|
t.string :marque
t.timestamps
我希望这会有所帮助......
我通过这样做来创建所有这些:rails g scaffold marque marque:string 或者:rails g scaffold annonce marque_id:integer [...]
谢谢!
++++
答案 0 :(得分:0)
检查MetaSearch,它可以为您提供一个很好的帮手。如果想要查看使用它的项目,请选中Active Admin。
答案 1 :(得分:0)
感谢来自RailsCasts的Ryan,他“指出了我正确的方向”;)
在我的annonces_controller中:
def index
@annonces = Annonce.joins(:marque, :modele, :energy).order(sort_column + " " + sort_direction)
@modeles = Modele.all
@marques = Marque.all
@energies = Energy.all
end
我在私人部分取代了这个:
private
def sort_column
params[:sort] || "marque" && "modele" && "energy"
end
谢谢!