2010-11-24 10 views
0

rooftopsのために、contacts部分的なページ内を配置しようとしています。 Rooftopsには多くの連絡先があり、ネストされたルートもあり、/rooftops/1/contactsが許可されています。 will_paginateリンクを作成しようとすると、 '/ rooftops/1/contacts /'ではなく、パスとして/rooftops/1が得られます。レールのページネストされたルート

ページネーションリンクビューを作成せずにページングパスを変更する方法はありますか?私はwill_paginate hereのrdocに行きましたが、godaddyページに行きます。

アイデア?

class Contact < ActiveRecord::Base 
    has_and_belongs_to_many :parents 
    has_and_belongs_to_many :rooftops 
    has_one :user 
    has_one :address, :as => :addressable, :dependent => :destroy 
    has_many :phone, :as => :phoneable, :dependent => :destroy 
    belongs_to :position 
    accepts_nested_attributes_for :address, :reject_if => lambda { |a| a[:street].blank? } 
    accepts_nested_attributes_for :phone, :reject_if => lambda { |a| a[:phone_number].blank? }, :allow_destroy => true 

    validates_associated :address, :phone, :position 
    validates_presence_of :lname 
    validates_presence_of :fname 
    validates_presence_of :email 
    validates_presence_of :position_id 

    def self.search(page) 
    paginate :per_page => 3, 
       :page => page 
    end 
end 

class RooftopsController < ApplicationController 
    def show 
    @rooftop = Rooftop.find(params[:id]) 
    @contacts = @rooftop.contacts.search(1) 
    end 
end 

<div class='pagination'> 
    <%= will_paginate contacts %> 
</div> 

これは/rooftops/1を作成し、私は/rooftops/1/contactsにそれを強制するかどうかはわかりません。

---------------------

私のルートは

resources :rooftops do 
    resources :contacts 
end 

私の問題がどこにあるか知っていると思います。私の検索機能はモデル内にあるので。私は実際にコントローラcontactsに触れることはありません。私はrooftopsコントローラから検索し、contactsビューから部分的に呼び出します。私は私の意見が何であるかを示します。

<div id='contacts' style='margin-top: 20px; border-bottom: 1px solid lightgrey;'> 
    <h4>Contacts <%= link_to "new", new_polymorphic_path([@rooftop, Contact]) %></h4> 

<%= render :partial => 'contacts/contacts', :locals => { :object_type => @rooftop, :layer => 1 } %> 
</div> 

これは実際の部分です。ご覧のように、実際にはコンタクトコントローラを通過することはありません。これが私の問題の原因になりますか?

<table> 
<tr> 
    <th></th> 
</tr> 
<% @contacts.each do |contact| %> 
<tr> 
    <td class='contact_mailer'> 
    <%= link_to image_tag('icons/gray_light/mail_12x9.png'), "mailto:#{contact.email}" %> 
    </td> 
    <td> 
    <div class='expandable layer_<%= layer %>' style='float: left'> 
    <%= link_to contact.fname.titleize + ' ' + contact.lname.titleize, polymorphic_path([object_type, @contact]), :class => "contact_name" %> 
     </div> 
    </td> 
    <td> 
     <%= image_tag 'icons/blue/key_stroke_8x8.png' %> 
    </td> 
</tr> 
<% end %> 
</table> 

<br /> 
<div class='pagination'> 
    <%= will_paginate @contacts %> 
</div> 

ありがとうございました。

+0

mislav/will_pageinateのgithub wikiページとドキュメントはおそらく同じです:https://github.com/mislav/will_paginate/wiki – fifigyuri

答えて

1

あなたが間違っている可能性のある場所がいくつかあります。ルートが正しく設定されていない可能性があります。 will_paginateコールは連絡先ビューに表示する必要がありますか?あなたが与えたスニペットからは分かりません。

Contactモデルのself.searchメソッドは、私にとっては非常に興味深いものです。これはむしろコントローラにあるはずです。それは意味がある、検索方法はContactの制御に関連しています。インスタンスメソッドとして持っています。

ルートrooftops/:id/contactsは、コンタクトコントローラにつながるはずです。それがそうであるかどうかを確認するかもしれません。

class Contact < ActiveRecord::Base 
    # your model definition, validations 
    # no self.search method here 
    cattr_reader :per_page 
    @@per_page = 3 
end 

class RooftopsController < ApplicationController 
    # your RooftopsController methods 
    # the show you listed should be in ContactsController 
end 

class ContactsController < ApplicationController 
    def show 
    # I guess you have contacts for Rooftop 
    @contacts = Rooftop.find(params[:id]).contacts 
    # you paginate the array of results 
    @contacts.paginate(params[:page]) 
    end 

## This is in the view of the Contacts#show 
<div class='pagination'> 
    <%= will_paginate contacts %> 
</div> 

おそらく、アレイ上のページ付けする必要があります。

は、私はあなたがこのようなものが必要とします。これは簡単です。thisを参照してください。これが助けてくれたらと思っています。

+0

さらなる解説とコードのために私の編集を見てください – rrivas

関連する問題