2

イベントモデルがあります。Pastevents、Upcoming events、currenteventsの3つのリンクがあります。

これらの3つのリンクは、events_urlにルーティングされます。つまり、インデックスアクションとデンからインデックスビューにルーティングされます。


以下は、イベントコントローラのインデックスアクションのコードです。

def index

      @today = Event.find (:all, :conditions => ['(start_date  = current_date)'], :order => 'start_date ')

      @past  = Event.find (:all, :conditions => ['start_date < ?', current_date], :order => 'start_date')

      @events  = Event.find( :all, :conditions => ['start_date > ?', current_date], :order => 'start_date')

end

@today変数データをCurrenteventsリンクのインデックスビュー、@ past dataのPasteventリンク、@ eventデータを今後のeventリンクに渡したいのですが、それぞれのリンクで異なる変数を渡すことができません。どうすればdisを実現できますか?


インデックスビューのコードは次のとおりです。

- content_for :title do
   Listing Events
 - content_for :div do
   Listing Events
 - content_for :brand_img do
   %img{:src => "images/lifestyle.gif", :height => "35"}
 - @events.each do |event|
   %ol.hoverbox
     %li.increase
       = link_to image_tag(event.photo.url), event_path(event)
       .abc
         = event.name
       %br/
      .bca
         = event.start_date
         |
         = event.start_time
         /|
         /= link_to " ".html_safe, event_path(event), :method => :delete, :class => "del-16", :confirm=>"Are u sure?", :title => "Delete", :style => "text-decoration:none;"

表示されていないので、私はti @events変数を参照しているので、今後のイベントのみを表示しています...異なるリンクでdis変数を変更するにはどうすればよいですか...

4

1 に答える 1

4

これを行うには、クエリ パラメーターを使用できます。次のように、追加の引数を link_to メソッドに渡すだけです。

<%= link_to "Past events", events_path(view: "past") %>
<%= link_to "Today's events", events_path(view: "today") %>
<%= link_to "All events", events_path %>

次に、コントローラーで次のようなことができます。

def index
  case params[:view]
  when 'past'
    @past  = Event.find (:all, :conditions => ['start_date < ?', current_date], :order => 'start_date')
  when 'today'
    @today = Event.find (:all, :conditions => ['(start_date  = current_date)'], :order => 'start_date ')
  else
    @events  = Event.find( :all, :conditions => ['start_date > ?', current_date], :order => 'start_date')
  end
end

ただし、コントローラーに対応する RESTful アクションを追加して、RESTful アプローチに従うことも検討する必要があります。

config/routes.rb:

resources :events do
  collection do
    get 'past'
    get 'today'
  end
end

次に、コントローラーでさまざまなアクションを定義する必要があります。

def index
  @events  = Event.find( :all, :conditions => ['start_date > ?', current_date], :order => 'start_date')
end

def past
  @events  = Event.find (:all, :conditions => ['start_date < ?', current_date], :order => 'start_date')
end

def today
  @events = Event.find (:all, :conditions => ['(start_date  = current_date)'], :order => 'start_date ')
end

次に、あなたの見解で:

<%= link_to "Today's events", todays_event_path %>
<%= link_to "Past events", past_event_path %>
<%= link_to "All events", event_path %>

どのアプローチを選択する場合でも、最初にこのガイドを読む必要があります: http://guides.rubyonrails.org/routing.html

ちなみに、コントローラーでクエリを実行する代わりに、モデルで名前付きスコープを使用することも検討する必要があります (そうすれば、彼を薄く保つことができます): http://guides.rubyonrails.org/active_record_querying.html#scopes

これが私の最初の回答ですので、お役に立てれば幸いです:)

于 2012-04-30T13:28:44.150 に答える