2012-02-17 45 views
0

我是RoR初學者,我的「應用程序」有問題。當內容來自其他表時,Rails僅通過ID進行排序?

我有一個名爲「annonces」的表和一個名爲「marques」的表。 (這就像「郵報」和「類別」,一個博客應用)

我下面railscasts的截屏#228,但是當我要排序 了「馬凱」一欄,它排序ID和不按名稱...

所以問題是,我該如何做一個可排序的表列,與多個 表?

它更多的是「點擊標題按屬性排序」。

例如,如果你點擊列(馬凱)這個名字這應該 按字母排序ASC和DESC:AUDI - 寶馬 - 大衆/再點擊: 大衆 - 寶馬 - 奧迪。但是現在,Rails像這樣排序(ID):1 - 2 - 3 // 3 - 2 - 1。這表現出這一點:大衆 - 奧迪 - 寶馬/寶馬 - 奧迪/大衆。

就像我說的,我下面這個截屏: http://railscasts.com/episodes/228-sortable-table-columns

您可以在此頁面上看到的結果的thumbail。

但在我而言,它與多個表(馬凱,MODELE,科特布斯...)

的截屏完美工作時一切都在同一個表。

但我想用其他表的內容來做。

在我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> 

的商品型號的視圖看起來像這樣。

我的表看起來像這樣:

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 ma rque_id:整數[...]

謝謝!

++++

回答

0

感謝瑞安,從RailsCasts誰 「點我到正確的方向」;)

在我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 

謝謝!

0

檢查MetaSearch這可以爲您提供應該是一個不錯的幫手。如果要查看使用它的項目,請檢查Active Admin

+0

我正在嘗試Active Admin,但我的類別顯示如下:# insead of Volkswagen例如。怎麼了 ? – Dl33ter 2012-02-17 14:36:28

+1

你有一個模型具有marque屬性的Marque?它顯示Marque對象,您可能想要顯示Marque屬性/字段。 – 2012-02-17 15:40:28

+0

在我的模特Marque中,我有:attr_accessible:marque - 並顯示,它是一個字段:<%= f.label:marque_id%>和<%= f.collection_select:marque_id,Marque.all,:id,:marque %> //是否有錯? – Dl33ter 2012-02-17 21:16:19

相關問題